Windows

通過 IIS 和 PHP 對 SQL Server 進行 Windows 身份驗證

  • July 10, 2012

我們在 Server 2008 R2 上執行 PHP 5.4 應用程序。我們想在單獨的伺服器上連接到 SQL Server 2008 數據庫,使用 Windows 身份驗證(必須是 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 或任何其他組件(如域控制器)上進行任何其他必需的設置嗎?

這很可能是一個授權問題。儘管客戶端將使用其域憑據向您的 IIS 伺服器進行身份驗證,但它不會被委派信任以訪問網路資源。

很好地解釋了這個問題。也見這裡

有幾種方法可以解決這個問題,但基本上訣竅是讓 PHP 程序在正確的上下文中執行。

如果您已經作為 NETWORK SERVICE 執行,那麼您可以將機器帳戶添加到數據庫伺服器;使用者名是 DOMAIN\COMPUTERNAME$。

如果這更容易,您還可以將應用程序池配置為使用不同的命名使用者。

除非要求使用者通過數據庫驗證,否則將 PHP 配置為模擬可能在這裡無濟於事。

引用自:https://serverfault.com/questions/406545