使用sqlsrv_connect连接SQL Server遇证书及登录错误求助
解决sqlsrv_connect连接SQL Server的证书及登录问题
1. 正确添加SSL信任参数到PHP代码
使用sqlsrv_connect时,SSL相关参数需放在连接选项数组中,完整示例代码如下:
<?php $serverName = "你的服务器地址,端口"; // 示例:"localhost,1433" 或 "192.168.1.100,1433" $connectionOptions = [ "Database" => "Ecran", "Uid" => "sa", "PWD" => "你的sa密码", "Encrypt" => true, "TrustServerCertificate" => true ]; $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn === false) { die(print_r(sqlsrv_errors(), true)); } ?>
Encrypt=true:强制启用加密连接,符合ODBC Driver 18的默认加密要求TrustServerCertificate=true:跳过证书链验证,适用于测试环境或使用自签名证书的场景(生产环境建议配置可信CA颁发的证书)
2. 解决sa登录失败及数据库无法打开问题
针对错误码28000、18456(登录失败)及4060(无法打开指定数据库),按以下步骤排查:
- 启用混合身份验证模式:打开SQL Server Management Studio(SSMS),右键目标服务器→属性→安全性,勾选「SQL Server和Windows身份验证模式」,修改后重启SQL Server服务。
- 检查sa账号配置:在SSMS中展开「安全性→登录名→sa」,右键属性:
- 确认账号状态为「启用」
- 验证密码输入正确(注意大小写)
- 切换到「用户映射」选项卡,勾选
Ecran数据库,并授予必要权限(如db_owner)
- 确认数据库状态:检查
Ecran数据库是否存在,名称拼写完全一致(SQL Server在区分大小写的排序规则下会严格匹配)。若不确定,可先连接master数据库,再执行USE Ecran;切换。 - 远程连接配置:若连接远程服务器,需确认:
- SQL Server配置管理器中已启用TCP/IP协议
- 服务器防火墙开放了SQL Server使用的端口(默认1433)
- 查看详细错误日志:在SSMS中展开「管理→SQL Server日志」,查看最新日志条目,里面会记录登录失败的具体原因(如密码错误、账号锁定、权限不足等)
内容的提问来源于stack exchange,提问作者Daniel Agra
相关产品推荐
相关产品推荐

