特定のページで Membership.GetUser() を呼び出すと、次のエラーが発生します (適切なセキュリティ制御を実装しているため、サイトの最初のページでこれを実行します)。
System.Data.SqlClient.SqlException (0x80131904): ユーザー 'IIS APPPOOL\UAT SITE' のログインに失敗しました。で .... System.Web.Security.SqlMembershipProvider.GetUser (文字列のユーザー名、ブール値の userIsOnline) で System.Web.Security.Membership.GetUser (文字列のユーザー名、ブール値の userIsOnline) で
サイトは IIS Express で正常に動作していますが、UAT は 2008R2 の IIS 7.5 で動作しています。
Web.Config
<authentication mode="Windows" />
<identity impersonate="True" />
<authorization>
<deny users="?" />
<allow users="*" />
</authorization>
<membership>
<providers>
<clear />
<add name="AspNetSqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider" connectionStringName="DatabaseGTN" enablePasswordRetrieval="false" enablePasswordReset="true" requiresQuestionAndAnswer="false" requiresUniqueEmail="false" maxInvalidPasswordAttempts="5" minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0" passwordAttemptWindow="10" applicationName="GTN" />
</providers>
</membership>
<roleManager enabled="true">
<providers>
<clear />
<add name="AspNetSqlRoleProvider" type="System.Web.Security.SqlRoleProvider" connectionStringName="DatabaseGTN" applicationName="GTN" />
</providers>
</roleManager>
サイトの「認証」ノードでは、ASP.NET の偽装と Windows 認証のみが有効になっています。 Web サーバーの Windows 認証機能は、サーバー マネージャーに従ってインストールされます。
サイトの他のすべてのページは、同じ接続文字列参照を使用して完全に問題なく実行されています。監査ログは、MS SQL 内の SYSTEM_USER によって正しいユーザー名 COMPANY\MyName が返されていることを示しているため、他のすべての SQL 要求が期待どおりに偽装されているようです。 .
私が見落としている可能性のある構成オプションの提案は、非常に高く評価されます。
私はそれを明確にする必要があります。DB ユーザーまたはロールを追加するのではなく、偽装を正しく機能させたいと考えています。もしくは、できない理由を上司に言えるようになりたい。