You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pyodbc连接SQL Server 2012遇SSL协议不支持错误求助

解决Ubuntu 22.04用pyodbc连接SQL Server 2012的SSL协议错误

错误原因

SQL Server 2012默认仅支持TLS 1.0/1.1(未打SP3及以上补丁时),而ODBC Driver 18 for SQL Server默认要求更高版本的TLS协议,即便设置Encrypt=no,驱动仍可能尝试建立SSL握手,最终因协议不兼容触发报错。

解决方案

方案1:改用ODBC Driver 17 for SQL Server

Driver 17对旧版SQL Server兼容性更好,无需调整数据库配置,仅需修改连接字符串:

'DRIVER={ODBC Driver 17 for SQL Server};SERVER=<ip>\<instance>,1433;DATABASE=<db_name>;UID=sa;PWD=<db_psw>;Encrypt=no'

先确认Ubuntu上已安装Driver 17,可通过以下命令安装:

sudo apt-get install msodbcsql17

方案2:保留Driver 18,调整TLS协议支持

步骤1:升级SQL Server 2012支持TLS 1.2

SQL Server 2012需安装**Service Pack 3 (SP3)**及后续累积更新,才能支持TLS 1.2。安装补丁后,在数据库服务器(Windows系统)的注册表中启用TLS 1.2:

  • 打开注册表编辑器,导航到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL11.<你的实例名>\MSSQLServer\SuperSocketNetLib
  • 新建DWORD值TLS12,设置数值为1
  • 重启SQL Server服务

步骤2:确认Ubuntu 22.04启用TLS 1.2

Ubuntu 22.04默认启用TLS 1.2,无需额外配置;若仍有问题,可检查系统SSL配置文件/etc/ssl/openssl.cnf,确保TLS 1.2在允许协议列表中。

方案3:Ubuntu端启用旧TLS协议(不推荐,安全性低)

若无法升级SQL Server补丁,可临时在Ubuntu上启用TLS 1.0/1.1:

  • 编辑/etc/ssl/openssl.cnf,在[openssl_init]下添加:
    ssl_conf = ssl_sect
    
  • 在文件末尾添加:
    [ssl_sect]
    system_default = system_default_sect
    
    [system_default_sect]
    MinProtocol = TLSv1
    CipherString = DEFAULT@SECLEVEL=1
    
  • 重启应用或系统生效

总结

优先推荐方案1(改用Driver 17),操作最简单且兼容性好;若必须使用Driver 18,优先升级SQL Server补丁启用TLS 1.2,避免启用旧协议带来的安全风险。

内容的提问来源于stack exchange,提问作者prodoreda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 09:23:12