在连接到Server实例时遇到问题,希望得到任何帮助才能正常工作。
优点:我有一个在Docker (Debian10)主机上运行的dockerized 4应用程序,它连接到开发环境中的一个网络Server 2012 (运行在Windows10框上)。
Bad:无法在暂存环境中获得连接到Server 2014 (运行在Server2012 VM上)的同一个坞映像。可以在Server事件日志上看到DB连接成功:
Login succeeded for user '<USERNAME>'. Connection made using SQL Server authentication. [CLIENT: <DB_SERVER_IP>]
但是,Django使用以下堆栈跟踪出错:
alluradjango-web-1 | self.connect()
alluradjango-web-1 | File "/home/djangouser/.local/lib/python3.9/site-packages/django/utils/asyncio.py", line 26, in inner
alluradjango-web-1 | return func(*args, **kwargs)
alluradjango-web-1 | File "/home/djangouser/.local/lib/python3.9/site-packages/django/db/backends/base/base.py", line 200, in connect
alluradjango-web-1 | self.connection = self.get_new_connection(conn_params)
alluradjango-web-1 | File "/home/djangouser/.local/lib/python3.9/site-packages/mssql/base.py", line 329, in get_new_connection
alluradjango-web-1 | conn = Database.connect(connstr,
alluradjango-web-1 | django.db.utils.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746 (10054) (SQLDriverConnect)')
settings.py:
DATABASES = {
"default": {
"ENGINE": "mssql",
"NAME": DB_NAME,
"HOST": DB_HOST,
"PORT": DB_PORT,
"USER": DB_USER,
"PASSWORD": DB_PASSWORD,
"AUTOCOMMIT": "false",
"OPTIONS": {
"ENGINE": "ODBC Driver 17 for SQL Server"
},
},
requirements.txt:
asgiref==3.5.0
backports.zoneinfo==0.2.1
Django==4.0.3
django-allow-cidr==0.4.0
django-environ
djangorestframework==3.13.1
mssql-django==1.1.2
netaddr==0.8.0
pyodbc==4.0.32
pytz==2021.3
sqlparse==0.4.2
black==22.1.0
pylint==2.12.2
pylint-django==2.5.2
python-decouple==3.6
pre-commit==2.17.0
djangouser@2062b37a0a3a:~$ odbcinst -j
unixODBC 2.3.6
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/djangouser/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
/etc/odbc.ini为空
djangouser@2062b37a0a3a:~$ cat /etc/odbcinst.ini
[ODBC Driver 17 for SQL Server]
Description=Microsoft ODBC Driver 17 for SQL Server
Driver=/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1
UsageCount=1
Server主机操作系统上的防火墙关闭。nmap显示端口是开放的。并且,如前所述,可以在Server主机OS日志上看到连接成功。
但是,上述错误仍然存在。任何帮助都会很感激,我已经被困了9天了。
选择@@version (2012年实例):Microsoft 2012 (SP2-GDR) (KB3194719) - 11.0.5388.0 (X64) 2016年9月23日16:56:29版权(c) Edition (64位) on Windows 6.3 (Build 19044:)
选择@@version (2014年实例):Microsoft 2014 (SP3-GDR) (KB4583463) - 12.0.6164.21 (X64) 2020年11月1日04:25:14版权(c) Microsoft Corporation Express Edition (64位) on Windows 6.3 (Build 9600:) (Hypervisor)
发布于 2022-09-14 16:03:11
解决:降级OpenSSL版本
将此添加到我的Dockerfile允许建立连接(仍然不确定为什么加密):
#Downgrade OpenSSL RUN curl openssl.org/source/openssl-1.1.1l.tar.gz -O \ && tar -zxvf openssl-1.1.1l.tar.gz && cd openssl-1.1.1l \ && ./config \ && make \ && make install \ && ldconfig \ && cd ..
https://stackoverflow.com/questions/71729516
复制相似问题