在CodeIgniter中配置MS SQL集成安全SSPI实现Windows身份验证
解决CodeIgniter(XAMPP)通过Windows集成安全访问MS SQL的问题
以下是针对你的场景的具体解决步骤:
修正CodeIgniter数据库配置
你当前的配置缺少集成安全的明确声明,sqlsrv驱动不会默认启用Windows身份验证,需要通过dsn或hostname参数指定:
方法1:使用DSN配置(推荐)
修改database.php中的参数:'dsn' => 'sqlsrv:Server=HOSTNAME;Database=MY_DATABASE;Integrated Security=SSPI', 'hostname' => '', //'username' => 'USERNAME', // 保持注释 //'password' => 'PASSWD', // 保持注释 'database' => '', // 因为DSN已指定数据库,这里可以留空 'dbdriver' => 'sqlsrv', // 其他参数保持不变方法2:在Hostname中追加参数
如果不想用DSN,可修改hostname:'hostname' => 'HOSTNAME;Integrated Security=SSPI', // 其他参数保持注释和原有配置注意:如果你的SQL Server是命名实例(比如
SQLEXPRESS),需要把HOSTNAME改成HOSTNAME\SQLEXPRESS;端口非默认1433的话再加,端口号,例如HOSTNAME\SQLEXPRESS,1434;Integrated Security=SSPI移除无用的php.ini配置
mssql.secure_connection=On是针对旧版mssql扩展的配置,你用的是sqlsrv扩展,这个参数完全无效,直接在php.ini中注释或删除该条目,避免干扰。确认sqlsrv扩展正常启用
- 检查XAMPP的
php/ext目录下是否存在对应PHP版本的php_sqlsrv.dll和php_pdo_sqlsrv.dll(注意匹配x86/x64、线程安全TS/非线程安全NTS,XAMPP默认是TS版本) - 在php.ini中添加以下两行(如果没有的话):
extension=sqlsrv extension=pdo_sqlsrv - 重启Apache服务,通过
phpinfo()页面搜索sqlsrv,确认扩展已加载。
- 检查XAMPP的
验证服务运行账户的数据库权限
Windows集成安全使用的是运行Apache服务的Windows账户,而非你当前登录的用户:- 打开服务管理器,找到
Apache2.4(XAMPP的Apache服务),查看其“登录身份” - 在MS SQL Server中,给该账户添加登录权限,并授予目标数据库的访问权限(比如db_datareader、db_datawriter等)
- 如果服务用的是
本地系统账户,则需要在SQL Server中添加NT AUTHORITY\SYSTEM作为登录名,并配置对应权限
- 打开服务管理器,找到
先测试底层连接(排除CodeIgniter问题)
写一个简单的PHP脚本放在XAMPP的htdocs目录下,测试直接连接SQL Server,确认底层连接正常:<?php $serverName = "HOSTNAME"; // 替换为你的SQL Server地址/实例名 $connectionOptions = [ "Database" => "MY_DATABASE", "IntegratedSecurity" => true ]; $conn = sqlsrv_connect($serverName, $connectionOptions); if ($conn) { echo "数据库连接成功!"; sqlsrv_close($conn); } else { echo "连接失败,错误信息:<br>"; print_r(sqlsrv_errors(), true); } ?>如果这个脚本连接失败,先解决底层问题,再回到CodeIgniter配置排查。
内容的提问来源于stack exchange,提问作者SRK
相关产品推荐
相关产品推荐

