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

Ubuntu 24.04无法连接Windows 2012上SQL Server 2016的问题求助

排查Ubuntu 24.04通过ODBC Driver 18连接SQL Server 2016(Windows 2012)失败问题

错误核心分析

你遇到的0x2746错误属于TCP Provider的SSL握手失败,本质是客户端(Ubuntu 24.04 + OpenSSL 3.0)与服务器(Windows 2012 + SQL Server 2016)的SSL/TLS协议版本或加密套件不兼容。

具体排查步骤

1. 检查SQL Server 2016的TLS配置

Windows 2012和SQL Server 2016默认可能未启用TLS 1.2(或仅启用了旧版本TLS 1.0/1.1),而ODBC Driver 18默认要求TLS 1.2及以上版本:

  • 登录Windows 2012服务器,打开注册表编辑器(regedit)
  • 定位路径:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols
  • 确认TLS 1.2项存在,且其下Client和Server子项的Enabled值设为1,DisabledByDefault设为0
  • 若缺失,手动创建这些项并设置对应值,重启服务器生效

2. 调整ODBC连接字符串的TLS参数

在连接字符串中显式指定TLS版本,强制匹配服务器支持的协议:

isql -v -k 'DRIVER=ODBC Driver 18 for SQL Server;Server=<SERVER>;UID=<USER>;PWD=<PASSWORD>;Database=<DATABASE>;ColumnEncryption=No;TrustServerCertificate=yes;Encrypt=yes;TLSVersion=TLS1.2'

若服务器仅支持TLS 1.1,可尝试将TLSVersion设为TLS1.1,但不推荐长期使用,建议优先升级服务器TLS配置。

3. 调整OpenSSL 3.0兼容性设置

OpenSSL 3.0默认禁用部分旧加密套件,可能与Windows 2012的SCHANNEL不匹配:

  • 临时测试:执行isql前设置环境变量放宽限制:
export SSL_CIPHERS="DEFAULT@SECLEVEL=1"
isql -v -k 'DRIVER=ODBC Driver 18 for SQL Server;Server=<SERVER>;UID=<USER>;PWD=<PASSWORD>;Database=<DATABASE>;ColumnEncryption=No;TrustServerCertificate=yes'
  • 若临时生效,可修改/etc/ssl/openssl.cnf,找到[system_default_sect]段调整为:
    MinProtocol = TLSv1.2
    CipherString = DEFAULT@SECLEVEL=1
    

4. 验证基础网络连通性

先排除网络层面问题:

  • 在Ubuntu机器执行telnet <SERVER> 1433,确认SQL默认端口可达
  • 检查Windows 2012防火墙是否允许Ubuntu机器IP访问1433端口
  • 确认SQL Server配置管理器中,TCP/IP协议已启用且监听端口为1433

5. 降级ODBC驱动(备选方案)

若上述调整无效,可尝试降级到ODBC Driver 17(对旧TLS版本兼容性更好):

# 卸载ODBC 18
sudo apt remove msodbcsql18
# 安装ODBC 17
sudo apt install msodbcsql17

然后用原连接字符串测试连接。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 12:37:11