我正在尝试使用pyodbc连接SQL server。在这种情况下,服务器SSL3.0被禁用,TLS 1.1和1.2被启用
当我使用最旧的驱动程序{SQL Server}时。我正在处理以下异常
pyodbc.connect('DRIVER={SQL Server};SERVER=XX;DATABASE=XX;UID=XX;PWD=XX;'
('08001', '[08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]SSL Security error (18) (SQLDriverConnect); [08001] [Microsoft][ODBC SQL Server Driver][DBNETLIB]ConnectionOpen (SECDoClientHandshake()). (772)')
但是,当我使用最新的odbc驱动程序{odbc driver 17 for SQL Server}时,作为一种解决方法
pyodbc.connect('DRIVER={ODBC Driver 17 for SQL Server};SERVER=XX;DATABASE=XX;UID=XX;PWD=XX;'
python脚本甚至在使用基类异常处理try-catch块的情况下也会崩溃
以下是事故详情:
Problem Event Name: APPCRASH
Application Name: pythonw.exe
Application Version: 3.8.150.1013
Application Timestamp: 5da4cb37
Fault Module Name: msodbcsql17.dll
Fault Module Version: 2017.175.2.1
Fault Module Timestamp: 5e5e976f
Exception Code: c0000005
Exception Offset: 00024005
OS Version: 6.1.7601.2.1.0.272.7
Locale ID: 2057
Additional Information 1: a7aa
Additional Information 2: a7aa91f17ea749d42a4de3b390fa5b3d
Additional Information 3: a7aa
Additional Information 4: a7aa91f17ea749d42a4de3b390fa5b3d
我还通过ODBC数据源管理启用了跟踪,并发现以下跟踪:
pythonw.exe -c a40-1154 ENTER SQLSetEnvAttr
SQLHENV 0x00000000
SQLINTEGER 201 <SQL_ATTR_CONNECTION_POOLING>
SQLPOINTER 2 <SQL_CP_ONE_PER_HENV>
SQLINTEGER 4
pythonw.exe -c a40-1154 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x00000000
SQLINTEGER 201 <SQL_ATTR_CONNECTION_POOLING>
SQLPOINTER 2 <SQL_CP_ONE_PER_HENV>
SQLINTEGER 4
pythonw.exe -c a40-1154 ENTER SQLAllocHandle
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x00000000
SQLHANDLE * 0x047FEC6C
pythonw.exe -c a40-1154 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 1 <SQL_HANDLE_ENV>
SQLHANDLE 0x00000000
SQLHANDLE * 0x047FEC6C ( 0x029B1BE0)
pythonw.exe -c a40-1154 ENTER SQLSetEnvAttr
SQLHENV 0x029B1BE0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 4
pythonw.exe -c a40-1154 EXIT SQLSetEnvAttr with return code 0 (SQL_SUCCESS)
SQLHENV 0x029B1BE0
SQLINTEGER 200 <SQL_ATTR_ODBC_VERSION>
SQLPOINTER 3 <SQL_OV_ODBC3>
SQLINTEGER 4
pythonw.exe -c a40-1154 ENTER SQLAllocHandle
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x029B1BE0
SQLHANDLE * 0x0041F4B0
pythonw.exe -c a40-1154 EXIT SQLAllocHandle with return code 0 (SQL_SUCCESS)
SQLSMALLINT 2 <SQL_HANDLE_DBC>
SQLHANDLE 0x029B1BE0
SQLHANDLE * 0x0041F4B0 ( 0x029B1C58)
pythonw.exe -c a40-1154 ENTER SQLDriverConnectW
HDBC 0x029B1C58
HWND 0x00000000
WCHAR * 0x04848B34 [ -3] "******\ 0"
SWORD -3
WCHAR * 0x04848B34
SWORD -3
SWORD * 0x00000000
UWORD 0 <SQL_DRIVER_NOPROMPT>
通过cmd使用python.exe运行时。cmd中未找到跟踪,但再次崩溃,详细信息如下:
Problem signature:
Problem Event Name: APPCRASH
Application Name: python.exe
Application Version: 3.8.150.1013
Application Timestamp: 5da4cb35
Fault Module Name: msodbcsql17.dll
Fault Module Version: 2017.175.2.1
Fault Module Timestamp: 5e5e976f
Exception Code: c0000005
Exception Offset: 00024005
OS Version: 6.1.7601.2.1.0.272.7
Locale ID: 2057
Additional Information 1: a7aa
Additional Information 2: a7aa91f17ea749d42a4de3b390fa5b3d
Additional Information 3: a7aa
Additional Information 4: a7aa91f17ea749d42a4de3b390fa5b3d
尝试将驱动程序参数从“SQL Server”更改为“SQL Server本机客户端11.0”。这使我成功地建立了联系
在我的例子中,“SQL Server”驱动程序参数在某些机器上工作,但在其他机器上不工作。我怀疑这是服务器端的TLS禁用问题,因为其他机器可以连接到pyodbc。我很好奇是否有人知道还有什么原因
相关问题 更多 >
编程相关推荐