6

PHP を使用して別のマシンの SQL Server に接続しようとしています。これを行う2つの方法を見つけました。odbc_connect または sqlsrvr connect のいずれかを使用します。

    $connection = odbc_connect("Driver={SQL Server Native Client 10.0};Server=$serverName;Database=$db;", 'user', 'pass');

また

  $conn = sqlsrv_connect($serverName, array('UID' => '', 'PWD' => ''));

SQL アカウントに接続しようとすると、接続が機能します。残念ながら、Windows 認証を使用して接続することはできません。

これまでのところ、次のことを試しました: 作業パスを使用し、Trusted_Connection=yes を追加しました。または統合セキュリティ=SSPI; . これを fastcgi.impersonate = 1 または 0 と組み合わせることも試みました。

ユーザーとパスを直接使用すると、ログイン拒否エラーが発生し、sspi で Windows 認証を試行すると、次のエラーが表示されます。ユーザー「NT AUTHORITY\ANONYMOUS LOGON」のログインに失敗しました。

私は問題をたくさんグーグルで検索しましたが、解決策を見つけることができませんでした。ただし、一部の人々は、php が Network Service アカウントを使用していないことについて話しており、それが問題である可能性があります。

これを修正する方法を知っている人はいますか?

前もって感謝します。

4

6 に答える 6

3

以下を使用して、別のIISサーバーで実行されているPHPからリモートSQLサーバーへの信頼できる接続を確立できました。

$connectionInfo = array('Database' => $dbname);
$con = sqlsrv_connect($servername,$connectionInfo);

php.ini で:

fastcgi.impersonate = 0
mssql.secure_connection = On

PHP サイトの IIS で:

Anonymous Authentication = Disabled
Windows Authentication = Enabled
Application Pool settings for site: Integrated, Network Service

$dbname データベースの SQL Server のデータベース セキュリティ:

create login: domainname\iisservername$  
map domainname\iisservername$ to db_datareader privilege for $dbname database

注: iisservername の $ は重要です。上記の設定により、IIS は SQL サーバーとの信頼できる接続を確立します。ユーザー ID とパスワードの情報を PHP ファイルに保存する必要はありません。アプリケーション プールでローカルに使用される権限は「ネットワーク サービス」です。リモートでは、これらのアクセス許可はユーザー domainname\iisservername$ としてネットワークを通過します。

于 2015-02-13T21:51:53.510 に答える
1

基本的に問題は、サーバーへの接続に使用される ID が、常に PHP が実行されているプロセスの ID になることです。

このリンクが役立つ場合があります。

于 2012-07-17T14:35:40.847 に答える
1

IIS 7.5 上の PHP が SSPI 認証を使用してユーザー名とパスワードなしで接続する場合。私は次のことをしなければなりませんでした:

IIS アプリケーション プールの詳細設定で、カスタム アカウント Domain\username を、PHP で接続する必要があるユーザーに使用するように設定しました。

IIS 固有の Web サイトで、基本設定を Connect As that same Domain\username に変更しました。

私のPHPコードでは、次を使用して接続できました$conn = sqlsrv_connect($dbhost, array("Database" => $dbname, "UID" => "", "PWD" => ""));

その他の注意事項:fastcgi.impersonate = 1 匿名認証のみが有効です *

于 2015-12-01T15:40:58.227 に答える
0

やってみました$conn = sqlsrv_connect($serverName);

配列はオプションです。デフォルトでは Windows 認証が使用されます。このMSDNの記事を参照してください

IIS では、Windows 認証を有効にし、匿名アクセスを無効にする必要があります。

于 2012-07-17T14:50:43.937 に答える