web-dev-qa-db-ja.com

IISおよびPHP

Server 2008R2でPHP 5.4アプリケーションを実行しています。Windows認証(Windows認証である必要があります)を使用して、別のサーバー上のSQL Server2008データベースに接続します。 DB管理者は他の方法で接続できません)PHPのSQLServerドライバーをダウンロードしてインストールしました。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、またはその他のコンポーネント(ドメインコントローラーなど)で行う必要のある追加の必要な設定はありますか? ?

3
Jeff

これはおそらく委任の問題です。クライアントは、ドメイン資格情報を使用してIISサーバーで認証しますが、ネットワークリソースにアクセスするための委任については信頼されません。

This 問題の良い説明があります。 ここ も参照してください

1
Chris McKeown

これをスキンするいくつかの方法ですが、基本的にコツはPHPプロセスを適切なコンテキストで実行することです。

すでにネットワークサービスとして実行している場合は、マシンアカウントをデータベースサーバーに追加できます。ユーザー名はDOMAIN\COMPUTERNAME $です。

簡単な場合は、別の名前のユーザーを使用するようにアプリケーションプールを構成することもできます。

PHPを偽装するように構成することは、ユーザーにデータベースに対するパススルー認証を要求しない限り、おそらくここでは役に立ちません。

1
Wyatt Barnett