如何在Laravel中使用域认证连接SQL Server?Navicat可正常连接
Laravel连接SQL Server域认证失败问题解决
问题说明
我可通过Navicat使用域认证连接SQL Server,但Laravel中无法完成连接。
当前数据库配置
[ "driver" => "sqlsrv", "url" => "ad.demo.com", "host" => "10.xx.xx.xx", "port" => "1550", "database" => "Database", "username" => "user1", "password" => "****", "charset" => "utf8", "prefix" => "", "prefix_indexes" => true, ]
报错信息
Illuminate/Database/QueryException 异常:SQLSTATE[28000]: [Microsoft][ODBC Driver 17 for SQL Server][SQL Server] 用户 'user1' 登录失败。(SQL: select count(*) as aggregate from [USERS])
解决步骤
1. 调整Laravel配置启用域认证
Laravel默认使用SQL Server身份验证,要切换到域认证(Windows身份验证),需修改配置:
- 删除
username和password字段 - 添加
trusted_connection并设为true
修改后的配置示例:
[ "driver" => "sqlsrv", "host" => "10.xx.xx.xx", "port" => "1550", "database" => "Database", "charset" => "utf8", "prefix" => "", "prefix_indexes" => true, "trusted_connection" => true, ]
2. 确认运行环境的用户权限
- Windows服务器(如IIS):确保应用池使用的域账号拥有SQL Server的访问权限,和Navicat使用的账号权限一致。
- Linux服务器:需通过Kerberos配置域认证:
- 安装krb5相关依赖包
- 配置
/etc/krb5.conf指向域控制器 - 获取并维护有效的Kerberos服务票据,确保PHP进程能调用
3. 验证ODBC驱动兼容性
确认服务器上安装的ODBC Driver 17 for SQL Server支持域认证,可通过创建ODBC数据源测试,确保能通过域身份成功连接SQL Server。
4. 检查SQL Server设置
确认SQL Server实例开启了Windows身份验证模式,且目标域用户user1拥有访问Database数据库的权限(包括查询USERS表的权限)。
内容的提问来源于stack exchange,提问作者local.clk
相关产品推荐
相关产品推荐

