Windows身份validation到SQL Server通过IIS和PHP

我们正在Server 2008 R2上运行PHP 5.4应用程序。 我们希望使用Windows身份validation连接到单独的服务器上的SQL Server 2008数据库(必须是Windows身份validation – 数据库pipe理员不会让我们连接任何其他方式)。 我已经下载了PHP的SQL Server驱动程序并安装了它们。 IISconfiguration为Windows身份validation,并且匿名身份validation已被禁用。 $ _SERVER ['AUTH_USER']报告我们当前login的Windows帐户。 在php.ini中,我们设置了fastcgi.impersonate = 1。

当我们使用Microsoft的以下代码设置连接时:

$serverName = "sqlserver\sqlserver"; $connectionInfo = array( "Database"=>"some_db"); /* Connect using Windows Authentication. */ $conn = sqlsrv_connect( $serverName, $connectionInfo); if( $conn === false ) { echo "Unable to connect.</br>"; die( print_r( sqlsrv_errors(), true)); } 

我们遇到以下错误消息:

 Unable to connect. Array ( [0] => Array ( [0] => 28000 [SQLSTATE] => 28000 [1] => 18456 [code] => 18456 [2] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. [message] => [Microsoft][SQL Server Native Client 11.0][SQL Server]Login failed for user 'NT AUTHORITY\ANONYMOUS LOGON'. ) 

是否有可能使用Windows身份validation通过PHP连接到SQL Server 2008? 是否还需要在IIS,SQL Server或其他任何组件(如域控制器)上进行其他必需的设置?

这很可能是代表团的问题。 尽pipe客户端将使用他们的域凭据对您的IIS服务器进行身份validation,但它不会被委托访问networking资源的信任。

这对这个问题有很好的解释。 另见这里

有几种方法来解决这个问题,但基本上诀窍是让PHP进程在正确的上下文中运行。

如果您已经作为NETWORK SERVICE运行,那么您可以将机器帐户添加到数据库服务器; 用户名是DOMAIN \ COMPUTERNAME $。

如果更容易,也可以将应用程序池configuration为使用不同的命名用户。

configurationPHP来模拟可能不会有帮助,除非需求是让用户通过对数据库的身份validation。