簡體   English   中英

mssql-django - TCP 提供程序:錯誤代碼 0x2746 (10054) (SQLDriverConnect)

[英]mssql-django - TCP Provider: Error Code 0x2746 (10054) (SQLDriverConnect)

在連接到 SQL 服務器實例時遇到問題,希望能提供任何幫助以使其正常工作。

優點:我有一個 dockerized Django 4 應用程序在 Docker (10)主機上運行,連接到網絡 SQL 服務器 2012 開發環境(在 Windows12 上運行)。

壞處:在登台環境中無法獲得相同的 docker 映像以連接到 SQL Server 2014(在 Server2012 VM 上運行)。 在 SQL 服務器事件日志上可以看到 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)')

設置.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"
        },
    },

要求.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

SQL 服務器主機操作系統上的防火牆已關閉。 nmap 顯示端口已打開。 並且,如上,可以在 SQL 服務器主機操作系統日志上看到連接成功。

但是,上述錯誤仍然存在。 任何幫助將不勝感激,我已經被困了 9 天。

Z999938282F04071859941E18F16EFCF42Z @@版本(2012實例):Microsoft Z9778840A0100CB30C982876741B0B0B0B0B0B0B0B0B0B0B0B0B0B5A2Z 2012(SP2-GDR)(SP2-GDR)(SP2-GDR)(KB3194719) Windows NT 6.3(內部版本 19044:)

select @@version (2014 instance): Microsoft SQL Server 2014 (SP3-GDR) (KB4583463) - 12.0.6164.21 (X64) Nov 1 2020 04:25:14 Copyright (c) Microsoft Corporation Express Edition (64-bit) on Windows NT 6.3(內部版本 9600:)(管理程序)

已解決:降級 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 .. 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM