Ubuntu 20系统PHP7.4远程连接SQL Server报错0x2746如何解决
排查步骤
第一步:先排查Ubuntu服务端本地配置
- 验证网络连通性
执行命令测试SQL Server端口连通性,默认端口为1433,若服务端修改过端口请替换为实际端口:
如果连接失败,先检查Ubuntu本地防火墙是否禁止了到该IP端口的出站请求,确认服务器路由、代理配置是否正常。nc -zv 你的SQL ServerIP 端口号 telnet 你的SQL ServerIP 端口号 - 修正OpenSSL兼容配置
Ubuntu 20.04默认的OpenSSL安全级别较高,若SQL Server使用TLS 1.0/1.1加密会出现握手失败,直接触发连接重置错误。修改/etc/ssl/openssl.cnf文件:
找到[system_default_sect]段,调整配置为:
修改后重启PHP-FPM服务生效。MinProtocol = TLSv1.0 CipherString = DEFAULT@SECLEVEL=1 - 验证ODBC层连接能力
跳过PHP直接用ODBC工具测试连接,直接用命令测试:
如果该命令连接失败,说明问题出在ODBC/系统层面,和PHP配置无关。isql -v "DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的SQL ServerIP;DATABASE=你的库名;UID=用户名;PWD=密码" - 调整PHP连接参数
在连接配置中增加加密和证书信任参数,避免加密校验失败:- PDO写法调整:
$conn = new PDO("sqlsrv:Server=". $serverName .";Database=". $databaseName .";Encrypt=yes;TrustServerCertificate=yes", $uid, $pwd);- sqlsrv扩展写法调整:
$connectionOptions = array( "database" => "<mydbname>", "uid" => "<dbusername>", "pwd" => "<dbpass>", "Encrypt" => true, "TrustServerCertificate" => true ); $conn = sqlsrv_connect($serverName, $connectionOptions);
第二步:排查SQL Server服务端配置
上述本地排查全部完成仍无法连接时,再检查服务端配置或联系服务商确认:
- 确认SQL Server的IP白名单规则,是否已将Ubuntu服务器的公网/内网IP加入允许列表,很多云服务商的托管SQL Server默认会拦截未授权的IP请求。
- 确认SQL Server是否使用非默认端口,若修改过端口,连接字符串中需要显式指定端口,格式为
Server=IP,端口号。 - 确认SQL Server的TCP/IP协议是否开启,以及是否允许远程连接。
- 确认SQL Server的加密配置,若未开启强制加密,可尝试将连接参数中的
Encrypt设为no再测试。
内容的提问来源于stack exchange,提问作者Sanjay Goswami
相关产品推荐
相关产品推荐

