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

Ubuntu22.04用ODBC Driver18连SQL Server2016遇0x2746错误求助

解决Ubuntu 22.04下ODBC Driver 18连接SQL Server 2016的0x2746错误

错误[08001][Microsoft][ODBC Driver 18 for SQL Server]TCP Provider: Error code 0x2746本质是TLS握手失败,核心原因是Ubuntu22.04默认的OpenSSL 3.x与SQL Server 2016的TLS套件/加密配置不兼容,且ODBC Driver 18默认启用严格加密验证规则。以下是三种可行解决方案:

方案1:修改连接字符串(无需更换OpenSSL,推荐)

ODBC Driver 18默认将Encrypt设为Strict,会强制验证服务器证书并使用现代TLS套件,而SQL Server 2016对这些配置支持有限。只需在连接字符串中添加适配参数:

  • Encrypt=Optional:允许非加密连接,或在服务器支持时自动加密(适合内部测试环境)
  • TrustServerCertificate=Yes:跳过证书验证,保留加密连接(适合使用自签证书的场景)
  • 可选追加TLS_Version=TLS1.2:强制使用SQL Server 2016支持的TLS版本

示例连接字符串:

Driver={ODBC Driver 18 for SQL Server};Server=tcp:xxxx,1433;Database=xxx;UID=xxx;PWD=xxx;Encrypt=Optional;

或:

Driver={ODBC Driver 18 for SQL Server};Server=tcp:xxxx,1433;Database=xxx;UID=xxx;PWD=xxx;TrustServerCertificate=Yes;TLS_Version=TLS1.2;

方案2:强制ODBC驱动加载指定的OpenSSL 1.0.1k库

如果必须使用加密且依赖旧版OpenSSL,可以通过以下方式让驱动优先加载你编译的OpenSSL 1.0.1k:

临时生效(单次连接)

在执行连接命令前设置环境变量,指定OpenSSL库路径(假设你将OpenSSL 1.0.1k安装在/usr/local/openssl-1.0.1k):

export LD_LIBRARY_PATH=/usr/local/openssl-1.0.1k/lib:$LD_LIBRARY_PATH
# 执行连接命令
isql -v "你的DSN名称"
# 或用sqlcmd
sqlcmd -S tcp:xxxx,1433 -U xxx -P xxx -d xxx

永久生效(修改驱动二进制文件)

使用patchelf工具修改ODBC驱动的加载路径,让它优先读取指定的OpenSSL库:

  1. 安装patchelf:
sudo apt install patchelf
  1. 找到ODBC Driver 18的核心库文件,通常路径为/opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.2.1
  2. 修改其rpath:
sudo patchelf --set-rpath /usr/local/openssl-1.0.1k/lib:/opt/microsoft/msodbcsql18/lib64 /opt/microsoft/msodbcsql18/lib64/libmsodbcsql-18.3.so.2.1

方案3:降级到ODBC Driver 17 for SQL Server

ODBC Driver 17对旧版SQL Server和OpenSSL的兼容性更好,适合长期使用:

  1. 卸载当前的ODBC Driver 18(可选):
sudo apt remove msodbcsql18
  1. 安装ODBC Driver 17:
sudo curl https://packages.microsoft.com/keys/microsoft.asc | sudo apt-key add -
sudo curl https://packages.microsoft.com/config/ubuntu/22.04/prod.list | sudo tee /etc/apt/sources.list.d/mssql-release.list
sudo apt update
sudo ACCEPT_EULA=Y apt install msodbcsql17
  1. 使用Driver 17的连接字符串:
Driver={ODBC Driver 17 for SQL Server};Server=tcp:xxxx,1433;Database=xxx;UID=xxx;PWD=xxx;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 05:55:25