我正在尝试使用 pyodbc 4.0.30 和 Python 3.7 连接到 SQL Server。过去几天一切都很顺利,直到今天我收到此错误:
操作错误:('08001','[08001] [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]SSL 安全错误 (18) (SQLDriverConnect);[08001] [Microsoft][ODBC SQL Server 驱动程序][DBNETLIB]ConnectionOpen (SECCreateCredentials())。(1)')`
我的联系方式:
conn = pyodbc.connect('driver={SQL Server};server=redacted;database=uipcc_awdb;uid=redacted;pwd=redacted;trusted_connection=no;')
请注意 我可以通过 SQL Server Management Studio 正常连接到数据库,并且我的计算机、SQL Server 或网络上没有进行任何更改。
我需要强调,我尝试遵循类似问题中提到的内容(但没有成功):
sslverify=0
encrypt=0
尝试在注册表中的以下位置启用 TLS 1.0:
Computer\HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS1.0\Client\
例如:
更改为:
这很可能是 TLS 版本问题。 SQL Server 上可能已禁用 TLS 1.0/TLS 1.1。
目前 pyodbc github 跟踪器上存在一个未解决的问题
并查看另一个问题: Pyodbc 对旧版本的 sql 驱动程序给出异常,但对最新版本失败
检查您的司机。我的应用程序使用的是较旧的驱动程序版本。当服务器/网络升级时,应用程序失败(在我的例子中是 perl) - 升级到最新的 sqlserver 驱动程序并在连接字符串中指定
TrustServerCertificate=yes
有效。