1

これはかなり一般的な質問のようですが、他の関連スレッドのヘルプと解決策を見ても役に立ちませんでした。

ここで PHP コード ブロック ( http://pastebin.com/xSJYyC3y ) を使用して、SQL Server データベースに接続してクエリを実行しようとしています。接続は機能しているようですが、クエリを実行すると、次のエラー メッセージが表示されます。

[Microsoft][SQL Server Native Client 11.0][SQL Server]The server principal "my_username" is not able to access the database "database_name" under the current security context.

このエラーは、PHP 経由でサーバーに接続するときにのみ発生します。MS SQL Management Studio を使用して手動で接続すると、すべて正常に動作します。

Windows 7 x64、SQL Server 2008 SP1 x64、および PHP 5.4 を使用しています。

私の問題を見てくれてありがとう!

4

1 に答える 1

1

SSMS を介してクエリを実行できるが、PHP を介してセキュリティの問題が発生する場合は、間違った偽装による問題が発生している可能性があります。

一般に、2 つの異なるセキュリティの問題が発生します。

  • SQL Server の内部セキュリティ - SQL Server アカウントでサーバーにログオンしていて、PHP と同じアカウントを使用して SSMS 内からクエリを実行できる場合、SQL Server のセキュリティは問題ありません。同じアカウントを使用できない場合は、サーバー上のロールとセキュリティを調べて、PHP が使用するアカウントのセキュリティを一時的に緩和します。
  • Windows セキュリティ: PHP からの接続が適切に構成されていない場合、偽装の問題が発生する可能性があります。私が見た中で最も完全な説明は、Brian Swans answer hereで見つけることができます。

クエリが複数のデータベースに触れる場合、または特にファイルシステム (おそらく共有フォルダー) に明示的に触れるものが含まれている場合は、すべてのサーバーと使用中のすべてのフォルダーに対する権限を確認する必要があることに注意してください。

また、ストアド プロシージャを実行している場合は、 に問題がないことを確認してくださいEXECUTE AS OWNERこの一例はここで見ることができます

それでも問題が解決しない場合は、Windows ボックスのデータベース ファイルのセキュリティを調べて、一時的にフォルダのセキュリティを緩和して、何かが変わるかどうかを確認してください。

于 2013-06-18T22:54:48.443 に答える