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

Ubuntu 20系统PHP7.4远程连接SQL Server报错0x2746如何解决

排查步骤

第一步:先排查Ubuntu服务端本地配置

  • 验证网络连通性
    执行命令测试SQL Server端口连通性,默认端口为1433,若服务端修改过端口请替换为实际端口:
    nc -zv 你的SQL ServerIP 端口号
    telnet 你的SQL ServerIP 端口号
    
    如果连接失败,先检查Ubuntu本地防火墙是否禁止了到该IP端口的出站请求,确认服务器路由、代理配置是否正常。
  • 修正OpenSSL兼容配置
    Ubuntu 20.04默认的OpenSSL安全级别较高,若SQL Server使用TLS 1.0/1.1加密会出现握手失败,直接触发连接重置错误。修改/etc/ssl/openssl.cnf文件:
    找到[system_default_sect]段,调整配置为:
    MinProtocol = TLSv1.0
    CipherString = DEFAULT@SECLEVEL=1
    
    修改后重启PHP-FPM服务生效。
  • 验证ODBC层连接能力
    跳过PHP直接用ODBC工具测试连接,直接用命令测试:
    isql -v "DRIVER={ODBC Driver 17 for SQL Server};SERVER=你的SQL ServerIP;DATABASE=你的库名;UID=用户名;PWD=密码"
    
    如果该命令连接失败,说明问题出在ODBC/系统层面,和PHP配置无关。
  • 调整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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 19:09:01