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

IIS环境下PHP应用如何以终端用户身份连接MSSQL(Windows认证)

需求可行性及实现方案

该需求完全可行,核心是通过Kerberos约束委派机制,将终端用户的AD身份传递到SQL Server,实现以用户自身权限执行数据库操作。以下是具体实现要点:

  • 基础环境确认

    • 确保IIS已禁用匿名认证,仅启用Windows身份认证,终端用户访问时需通过AD身份校验,PHP可获取到用户的AD身份上下文。
    • SQL Server已开启Windows身份认证,且目标AD用户/组已在SQL Server中创建对应登录名并分配了所需权限。
  • 配置Kerberos约束委派

    • 将IIS应用池的运行账户改为域用户账户(不推荐用内置账户,委派配置更灵活)。
    • 在AD管理工具中找到该域账户,进入「委派」标签页,选择「信任此用户用于指定服务的委派」,添加SQL Server的服务主体名称(SPN),限制仅委派到目标SQL Server服务,遵循最小权限原则。
    • 若SQL Server未注册SPN,以域管理员身份执行以下命令注册(替换为实际服务器信息):
      setspn -S MSSQLSvc/sqlserver.yourdomain.com:1433 DOMAIN\sql_service_account
      
  • PHP连接配置调整

    • 使用sqlsrv或pdo_sqlsrv扩展(仅这两个扩展支持AD集成认证),连接字符串中指定Authentication="ActiveDirectoryIntegrated",且不填写用户名和密码,扩展会自动使用当前终端用户的AD身份建立连接。
    • 示例代码:
      $server = "sqlserver.yourdomain.com,1433";
      $connOpts = [
          "Database" => "YourTargetDB",
          "Authentication" => "ActiveDirectoryIntegrated"
      ];
      $conn = sqlsrv_connect($server, $connOpts);
      
  • 关键注意事项

    • 所有服务器(IIS、SQL Server)必须处于同一AD域或信任域内,Kerberos委派无法跨非信任域工作。
    • IIS应用池的域账户需拥有委派权限,且SQL Server需信任该账户的委派操作。
    • 确保IIS的Windows身份认证优先使用Kerberos(调整身份认证提供商顺序,将Kerberos放在NTLM之前),NTLM不支持身份委派。
    • 可用setspn -L检查SPN注册状态,用klist命令查看客户端与服务器的Kerberos票据是否正常生成,排查委派问题。

内容的提问来源于stack exchange,提问作者Mario

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 04:07:15