0

特定のページで 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 ユーザーまたはロールを追加するのではなく、偽装を正しく機能させたいと考えています。もしくは、できない理由を上司に言えるようになりたい。

4

1 に答える 1

0

あなたのエラーを見て、私が考えることができる唯一のことは、データベースへのアクセスを「IIS APPPOOL\UAT SITE」に追加したことを確認することです。

それを確認するには、Sql Server 管理コンソールを開き、このユーザーが存在する場合はセキュリティ ノードを調べます。

このユーザーのプロパティよりも、「ユーザーマッピング」の下を見て、データベースの承認が適切かどうかを確認してください。

于 2012-08-14T02:47:55.620 に答える