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

Ubuntu20.04连接SQL Server2005报错0x2746求助

问题描述

在Ubuntu 20.04服务器上连接SQL Server 2005数据库失败,报错:

[Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: Error code 0x2746

旧Ubuntu 18.04服务器可正常连接,环境对比:

  • 旧服务器:OpenSSL 1.1.1,仅安装ODBC Driver 17 for SQL Server
  • 新服务器:OpenSSL 1.1.1f,同时安装ODBC Driver 17 for SQL Server和ODBC Driver 18 for SQL Server
    已执行openssl s_client -connect IP:PORT -tls1,返回CONNECTED(00000003),PHP连接代码如下:
new PDO ("sqlsrv:Server=$hostname,$port;Database=$dbname;TrustServerCertificate=Yes;Encrypt=no", "$username", "$pw");
解决方法
  • 强制指定使用ODBC Driver 17
    新服务器同时安装了ODBC 17和18,ODBC 18不再支持SQL Server 2005,需在连接字符串中明确指定驱动:

    new PDO("sqlsrv:Server=$hostname,$port;Database=$dbname;TrustServerCertificate=Yes;Encrypt=no;Driver={ODBC Driver 17 for SQL Server}", "$username", "$pw");
    
  • 调整OpenSSL兼容性配置
    OpenSSL 1.1.1f默认安全级别可能限制了旧加密套件,修改/etc/ssl/openssl.cnf:

    1. 在[openssl_init]区块下添加:
      ssl_conf = ssl_sect
      
    2. 新增以下区块:
      [ssl_sect]
      system_default = system_default_sect
      
      [system_default_sect]
      MinProtocol = TLSv1.0
      CipherString = DEFAULT@SECLEVEL=1
      
    3. 重启PHP-FPM或Web服务(如Apache/Nginx)
  • 添加TDS版本指定
    SQL Server 2005使用TDS 8.0协议,在连接字符串中补充该参数:

    new PDO("sqlsrv:Server=$hostname,$port;Database=$dbname;TrustServerCertificate=Yes;Encrypt=no;Driver={ODBC Driver 17 for SQL Server};TDS_Version=8.0", "$username", "$pw");
    
  • 检查PHP sqlsrv扩展关联
    执行php -i | grep sqlsrv查看扩展关联的驱动版本,若关联到ODBC 18,需重新安装sqlsrv扩展并指定ODBC 17路径。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:48:20