我正在使用运行django应用程序的docker容器。
[每当我尝试运行在两个单独的数据库上处理数据的函数时,都会收到以下错误:
错误:[Microsoft] [SQL Server的ODBC驱动程序17] SSL提供程序:[错误:1425F102:SSL例程:ssl_choose_client_version:不受支持的协议](-1)(SQLDriverConnect)']]
这是我运行的功能
def preStepBtn3(request):
sourcePE = request.GET.get('sourcePE')
targetPE = request.GET.get('targetPE')
inputFTID = request.session['username']
datetime_object = datetime.datetime.now()
step_name = "preStepBtn3"
table_name = "null"
Action_taken = "change router status to MIG"
MassivePortalSessionID = request.session['MassivePortalSessionID']
try:
with connections['DataAdmin'].cursor() as cursor:
sql = """DECLARE @out nvarchar(max); exec DTA.mig_sop_ce_status2mig_django 0, %s, @param_out = @out OUTPUT; SELECT @out AS the_output; """
params = [sourcePE]
cursor.execute(sql, params)
rows = cursor.fetchall()
result = []
result.append(rows)
logDB_sql(MassivePortalSessionID, inputFTID, sourcePE, targetPE,
table_name, step_name, datetime_object, Action_taken)
print("data inserted in log DB")
while rows:
print(rows)
if cursor.nextset():
result.append(cursor.fetchall())
else:
print(result)
return JsonResponse(result, safe=False)
except Exception as ex:
error = ex
print(error)
context = {'text': error}
logDB_sql(MassivePortalSessionID, inputFTID, sourcePE, targetPE,
table_name, step_name, datetime_object, Action_taken)
print("data inserted in log DB during exception")
return render(request, 'posts/textArea.html', context)
无论何时删除logDB_sql,它都能正常工作。这是logDB_sql的代码
def logDB_sql(MassivePortalSessionID, inputFTID, sourcePE, targetPE, table_name, step_name, datetime_object, Action_taken):
params = [MassivePortalSessionID, inputFTID, sourcePE, targetPE,
table_name, step_name, datetime_object, Action_taken]
print(targetPE)
print(sourcePE)
print(MassivePortalSessionID)
print(inputFTID)
if sourcePE != None and MassivePortalSessionID != None and targetPE != None and inputFTID != None:
sql = " insert into MASSIVE_MIGRATION_PORTAL_LOGS values (%s,%s,%s,%s,%s,%s,%s,%s )"
print(sql)
print(params)
with connections['logDB'].cursor() as cursor:
cursor.execute(sql, params)
cursor.close()
print("data inserted")
这是settings.py中的连接信息。请注意,它们是不同的主机
'logDB': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'log_db',
'HOST': 'xx.xx.xx.xx',
'USER': 'user1',
'PASSWORD': 'password1',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'timeout': 1000,
}
},
'DataAdmin': {
'ENGINE': 'sql_server.pyodbc',
'NAME': 'another_db',
'HOST': 'xx.xx.xx.xx',
'USER': 'user1,
'PASSWORD': 'password1',
'OPTIONS': {
'driver': 'ODBC Driver 17 for SQL Server',
'timeout': 1000,
}
},
}
这是错误消息
File "/app/posts/views.py", line 387, in preStepBtn2
table_name, step_name, datetime_object, Action_taken)
File "/app/posts/views.py", line 90, in logDB_sql
with connections['logDB'].cursor() as cursor:
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 255, in cursor
return self._cursor()
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 232, in _cursor
self.ensure_connection()
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
self.connect()
File "/usr/local/lib/python3.6/site-packages/django/db/utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 216, in ensure_connection
self.connect()
File "/usr/local/lib/python3.6/site-packages/django/db/backends/base/base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "/usr/local/lib/python3.6/site-packages/sql_server/pyodbc/base.py", line 307, in get_new_connection
timeout=timeout)
django.db.utils.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]SSL Provider: [error:1425F102:SSL routines:ssl_choose_client_version:unsupported protocol] (-1) (SQLDriverConnect)')
我已经在Windows机器上本地尝试了它,并且它没有任何问题,无法确定为什么将它移到docker容器时会失败。
有什么想法吗?
我已通过更新openssl.cnf
中的/etc/ssl/
文件解决了此问题>
将MinProtocol = TLSv1.2
更改为MinProtocol = TLSv1.0
,将CipherString = DEFAULT@SECLEVEL=2
更改为CipherString = DEFAULT@SECLEVEL=1
希望这会有所帮助。