2

PHP (IIS) を使用して Microsoft SQL サーバー データベースに接続しようとしています。コードで提供されるユーザー/パスは、Access で ODBC 経由でデータベースにアクセスできる AD アカウントです。

$serverName = "servername";
$connectionInfo = array( "Database"=>"dbname", "UID"=>"myuser", "PWD"=>"mypass");
$conn = sqlsrv_connect( $serverName, $connectionInfo);

if( $conn ) {
     echo "Connection established.<br />";
}else{
     echo "Connection could not be established.<br /><pre>";
     die( print_r( sqlsrv_errors(), true));
}

サーバー名とデータベース名と同様に、ユーザー名とパスワードは有効です。しかし、これはエラーを返しています:

[Microsoft][SQL Server Native Client 10.0][SQL Server]ユーザー 'myuser' のログインに失敗しました。

ユーザー名(ADの有効なユーザーであり、Accessを使用してこのデータベースに接続/リンクできます)についても試しました:

  • DOMAIN.ORG\myuser
  • DOMAIN.ORG\\myuser
  • myuser@DOMAIN.ORG

私のドメイン ユーザー ( myuser) は、AD を介してそのサーバーに対する管理者権限を持っています。しかし、それは同じLogin failedエラーを返します。足りないものはありますか?Accessを使用して問題なく(同じユーザーで)この同じデータベースに接続できます。

Access での接続方法は、ローカル ユーザー用の ODBC データ ソースです。データ ソースは、「ネットワーク ログイン ID を使用した Windows NT 認証で」認証するように設定されています。PHPでそれを行うにはどうすればよいですか?

この偽装構成が考えられる原因ですか?

PHPはユーザーの下で実行されていますnt authority\iusr

を使用してログインしようとしていた場合iusr、エラーメッセージはそうではありませんか?

このマシンで「TestDS」と呼ばれるデータ ソースを作成し、次のコードを使用してみました。

$conn = odbc_connect("TestDS", "", "");

しかし、それは私に与えます:

指定された DSN には、ドライバとアプリケーションの間のアーキテクチャの不一致が含まれています。SQLConnect の SQL 状態 IM014

Machine1 は Web ページ (PHP コードが Machine2 にある) にアクセスしようとしているクライアントであり、Machine2 のコードは Machine3 への SQL 接続を確立しています ( servername)。

4

1 に答える 1

2

接続文字列で「Trusted Connection=SSPI」を指定すると、SQL Server 接続の「Windows セキュリティ」が有効になります。ユーザー名やパスワードは接続文字列に保存されません (これは "SQL Server セキュリティ" のみです)。PHP を実行するプロセス (おそらく php_cgi.exe 自体) は、Windows ログインが SQL Server に登録されている Windows (ローカルまたは AD) で実行する必要があります。

IIS では、php_cgi.exe はアプリケーション プールのユーザー ID で実行されます。異種のセキュリティ環境を使用している場合は、この 1 つの Web サイト専用の IIS アプリケーション プールを作成することをお勧めします。

于 2012-06-20T19:14:26.993 に答える