まず、サイトを実行しているアカウントにアクセス許可を付与しようとしているようです。IIS 6 および IIS7 では、これらはアプリケーション プールに設定されたアカウントによって制御されます。そのアカウントは以前はありASPNET
ましたが、デフォルトではなくなりました。代わりに、デフォルト(私が信じている.NET 2.0以降)はNETWORK SERVICE
. ただし、IIS 7 を使用している場合は、さらに変更されています。IIS7 のデフォルトでは、「ApplicationPoolIdentity」と呼ばれるものを使用します。これは、サイトごとに作成された独自の特別な資格情報です。SQL Server が Web サーバーとは別のマシン上にある場合、資格情報がすべてマシンに対してローカルであるという別の問題が発生します。
セットアップに応じて、次のことを行うことをお勧めします。
両方のサーバーがドメイン上にあり、信頼できる接続を使用したい場合:
- ドメイン アカウントを作成し、それを Domain Users にドロップします。
- Web サーバーで、このアカウントを IIS_IUSRS グループにドロップします。
- サイトのアプリケーション プールに移動し、サイトを実行しているアカウントをこのドメイン アカウントに変更します。また、このアカウントがサイト ファイルに対する適切な NTFS アクセス許可を持っていることを確認する必要があります。このサイトがデータベースへの書き込みのみを行う場合、サイト ファイルを含むフォルダーへの読み取り専用アクセスをアカウントに与えることができます。
- サイトで使用される接続文字列が、信頼できる接続を要求するように形成されていることを確認します。(構文については、www.connectionstrings.com を参照してください)
- データベース サーバーで、このアカウントへの付与を実行します。
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO "domain name\MyIISAccount"
また、ドメイン上の両方のサーバーで SPN (サービス プリンシパル名) の作成が必要になる可能性があるという事実に関連して、他の Kerberos の問題が発生する場合もあります。
どちらのサーバーもドメイン上になく (つまり、どちらもメンバー サーバーで)、信頼できる接続を使用したい場合:
- 同じユーザー名とパスワードを使用して、Web サーバーとデータベース サーバーの両方にローカル アカウントを作成します。両者が同じユーザー名とパスワードを持っていることが重要です。この手法には、ユーザー名とパスワードによって作成されたハッシュに一致する NTLM「パススルー」認証を使用して、ユーザーが 2 つの異なるサーバー間で認証されているかどうかを判断することが含まれます。Windows 2008 R2 では、2 つのサーバー間で NTLM が有効になっていることを確認するために、いくつかのローカル ポリシー フープをジャンプする必要がある場合があります。
- このアカウントで上記の手順 2 から 4 を実行します。
- SQL Server で、このローカル アカウントにログインがあり、このログインがデータベース内のユーザーにマップされていることを確認します。次に、次のようなものを実行します。
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\AccountUsedBySite'
信頼できる接続の代わりに SQL アカウントを使用したい場合:
- このシナリオでは、サイトがデータベースに接続するために使用する接続文字列には、データベース内のユーザーにマップされる SQL Server データベースのログインにマップされるユーザー名とパスワードが含まれます (通常、それを作成するために db_owner ロールに配置されます)。 dbo)。これ
- 資格情報が正しいと仮定すると、このユーザーに対して許可を実行するだけで済みます。
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLUserAccountUsedBySite'
IIS と SQL Server の両方が同じマシン上にあり、信頼できる接続を使用したい
- ローカル ユーザー アカウントを作成し、Users グループにドロップします。
- このアカウントをローカルの IIS_IUSRS グループにドロップします。
- サイトのアプリケーション プールに移動し、サイトを実行しているアカウントをこのローカル アカウントに変更します。また、このアカウントがサイト ファイルに対する適切な NTFS アクセス許可を持っていることを確認する必要があります。このサイトがデータベースへの書き込みのみを行う場合、サイト ファイルを含むフォルダーへの読み取り専用アクセスをアカウントに与えることができます。
- サイトで使用される接続文字列が、信頼できる接続を要求するように形成されていることを確認します。(構文については、www.connectionstrings.com を参照してください)
- SQL Server で、このアカウントのログインを作成してから、このアカウントの適切なデータベースにユーザーを作成して、適切なロールにドロップします。
- 次に、このアカウントへの付与を実行します。
GRANT SUBSCRIBE QUERY NOTIFICATIONS TO 'SQLServerMachineName\MyIISAccount'