PHP连接本地SQL Server失败,错误18456寻求解决方案
解决方案:SQL Server Windows身份验证登录失败(错误18456)
错误代码18456表明登录验证失败,结合你使用Windows域账号IIIIN\fsadiq的场景,问题核心是连接参数配置不符合Windows身份验证规则,以下是具体解决步骤:
1. 修正PHP连接脚本
你当前脚本使用的Uid和PWD参数是SQL Server身份验证的配置方式,Windows身份验证无需传入账号密码,而是依赖运行PHP的进程身份完成验证,修改连接参数如下:
方式一:使用Authentication常量
<?php $serverName = "171.11.111.111"; $database = "ISS_CFW"; // Windows身份验证参数 $connection = [ "Database" => $database, "Authentication" => SQLSRV_AUTH_WINDOWS ]; $conn = sqlsrv_connect($serverName, $connection); if (!$conn) { die(print_r(sqlsrv_errors(), true)); } else { echo 'connection established'; } ?>
方式二:使用Trusted_Connection参数
<?php $serverName = "171.11.111.111"; $database = "ISS_CFW"; // Windows身份验证参数 $connection = [ "Database" => $database, "Trusted_Connection" => "yes" ]; $conn = sqlsrv_connect($serverName, $connection); if (!$conn) { die(print_r(sqlsrv_errors(), true)); } else { echo 'connection established'; } ?>
2. 确认SQL Server身份验证模式
确保SQL Server已启用Windows身份验证:
- 打开SQL Server Management Studio(SSMS),连接目标实例
- 右键实例 → 属性 → 安全性
- 确认服务器身份验证为SQL Server和Windows身份验证模式(仅启用SQL Server身份验证时,Windows账号无法登录)
3. 配置账号的SQL Server登录权限
需要在SQL Server中为IIIIN\fsadiq创建登录并赋予数据库权限:
- 在SSMS中展开实例 → 安全性 → 登录名
- 右键登录名 → 新建登录名
- 选择“Windows身份验证”,输入登录名
IIIIN\fsadiq - 切换到“用户映射”,勾选
ISS_CFW数据库,按需赋予角色(如db_datareader、db_datawriter)
4. 确保运行PHP的进程身份正确
- CLI运行PHP:当前登录系统的用户必须是
IIIIN\fsadiq - Web服务器(如IIS):修改应用池身份为
IIIIN\fsadiq(IIS管理器 → 应用池 → 目标池右键 → 高级设置 → 进程模型 → 标识)
内容的提问来源于stack exchange,提问作者Farouk
相关产品推荐
相关产品推荐

