我们在 Server 2008 R2 上运行 PHP 5.4 应用程序。我们想使用 Windows 身份验证连接到单独服务器上的 SQL Server 2008 数据库(必须是 Windows 身份验证 - 数据库管理员不允许我们通过任何其他方式连接)。我已经下载了适用于 PHP 的 SQL Server 驱动程序并进行了安装。IIS 配置为 Windows 身份验证,并且已禁用匿名身份验证。$_SERVER['AUTH_USER'] 报告我们当前登录的 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 身份验证通过 PHP 连接到 SQL Server 2008?我们需要在 IIS、SQL Server 或任何其他组件(如域控制器)上进行任何其他必需的设置吗?
答案1
答案2
有几种方法可以实现这一点,但基本上的诀窍是让 PHP 进程在正确的上下文中运行。
如果您已经以 NETWORK SERVICE 身份运行,那么您可以将机器帐户添加到数据库服务器;用户名是 DOMAIN\COMPUTERNAME$。
如果这样更简单,您还可以将应用程序池配置为使用不同的命名用户。
配置 PHP 进行模拟可能在这里没有帮助,除非要求让用户通过数据库进行身份验证。