6

IIS7.0を使用してRackspaceCloudServerでホストしているASP.NETMVC2Webサイトを構築しました。

サーバー上のIIS7.0を使用してローカルホストでWebサイトをテストしようとすると、エラーページが表示されます。これはSQLログからのものです(私はSQL Web Editionを使用しています):

Error: 18456, Severity: 14, State: 11
Login failed for user 'IIS APPPOOL\DefaultAppPool'. Reason: Token-based server access validation failed with an infrastructure error. Check for previous errors. [CLIENT: <local machine>]

私のウェブサイトは自宅のPCで正常に動作するため、問題はデータベースへの接続に関係しています。

エラーメッセージコードを調べたところ、有効なDBログインがあるが、サーバーアクセスに失敗したことがわかりました。私はさまざまなフォーラム(stackoverflow / serverfaultを含む)でこれを読んでスタックしましたが、これが私が試したものですが、どれも問題を解決していません:

  1. SQLServer認証を使用して新しいログインを設定します。SQLで新しいログインを作成し、DBに正しいアクセス権を付与しました。Web構成で次の接続文字列を使用しました。

    データソース=myServer;初期カタログ=myDB;ユーザーID=myUsername; Password = myPassword;

  2. として新しいログインを作成しますIIS APPPOOL\DefaultAppPool。正しいアクセス権を使用してSQLで新しいログインを作成し、Windows認証を使用しました。次のような接続文字列:

    Server = myServer; Database = myDataBase; Trusted_Connection = True;

  3. 既存のネットワークログインを使用しますNT AUTHORITY\NETWORK SERVICE。このユーザーを正しいアクセス権でデータベースにマップしました。次のような接続文字列:

    Server = myServer; Database = myDataBase; Trusted_Connection = True;

オンラインで資料を読んだとき、これらが主な選択肢のようでした。最後に、役立つかもしれない他のいくつかのものとしてここに:

  • 管理者として実行するようにSQLを設定しても、問題は解決しませんでした
  • オフにするUACことは役に立ちませんでした
  • 私のアプリケーションプールはApplicationPoolIdentityを使用しています(セキュリティ上の理由から最適です)

つまり、DBからオブジェクトを取得できないため、Webサイトが起動せず、エラーが発生します。問題は、サーバーへのアクセス権が正しく設定されていないことです。必要なSQLログイン/接続文字列/ドメインアクセス権の構成がわかりません。

これは私を3週間悩ませてきました-私を助けてくれるように5分を割いていただけますか?

4

1 に答える 1

8

サーバー(WebおよびSQL)はドメインの一部ではないため、Windows認証(統合セキュリティ)を使用してSQLServerに接続することはできません。

IISではIntegrated Security=SSPI、接続文字列を使用する場合、SQLServerへの接続に使用される実際のユーザーはアプリケーションプールIDです。

オプション1を選択する必要があります。これは、 SQLServer認証を使用して新しいログインを設定することを意味します。

したがって、手順は次のようになります。

  1. SQLServerユーザーを作成しますmyUsername
  2. ユーザーのプロパティダイアログで、Securablesセクションに移動し、チェックされていることPublicを確認します。
  3. 次に、User mappingセクション(左側)に移動します。リストでデータベースを探して確認します。下のリストで、、、およびDatabase role membershipを必ずチェックしてください。publicdb_datareaderdb_datawriter
  4. 次に、ストアドプロシージャを実行する権限をユーザーに付与します。としてsa、Management Studioで、次を実行します。

    myUserNameに実行を許可します。

  5. 完了です。

セキュリティに関しては、後でmyUserName、たとえばテーブルやその他のオブジェクトを削除するなど、できないようにする権限を調整できます。

アプリケーションでは、ポイント1で接続文字列を使用する必要があります。

他に問題がある場合は、エラーメッセージを投稿してください。

于 2012-06-24T08:37:37.910 に答える