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:- 在
[openssl_init]区块下添加:ssl_conf = ssl_sect - 新增以下区块:
[ssl_sect] system_default = system_default_sect [system_default_sect] MinProtocol = TLSv1.0 CipherString = DEFAULT@SECLEVEL=1 - 重启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
相关产品推荐
相关产品推荐

