質問

ELMAH は開発サーバー (Cassini) で動作しており、非常に満足していましたが、今はすべてを運用サーバー (IIS7) に移行しようとしているので、蜜月は終わったようです。

私はそれを乗り越えました IIS7 の「落とし穴」, 、率直に言って、これはドキュメントでもっと強調されているはずであり、メモリ内のログを使用するだけであれば機能します。

ただし、(開発システムで行っているように) SQL Server ログを使用できるようにしようとすると、次のようなエラーが発生します。

オブジェクト ELMAH_GetErrorsXml に対する EXECUTE 権限が拒否されました

まあ、いいよ。データベースにアクセス許可を付与する方法は知っていますが、どのユーザーとどのストアド プロシージャ/テーブルにアクセスを許可する必要があるかを理解するのに非常に苦労しています。

私を本当に混乱させているのは、開発サーバーで動作させるためにこのようなことをする必要がなかったということです。私が確認できる唯一の違いは、開発サーバーでは NT AUTHORITY\IUSR として接続しているように見えるのに対し、運用サーバーでは NT AUTHORITY ETWORK SERVICE として接続しているように見えることです。(信頼された接続を使用しているだけなので、そのように明示的に構成していません。おそらく Web サーバーに関係していると思います)。 アップデート:その後、Cassini を使用しているため、実際には IUSR ではなく私 (管理者) としてログインしていることがわかりました。これが、権限の問題が発生しなかった理由の説明になります。

私の開発サーバーでは、IUSR アカウントはパブリック データベース ロールのメンバーであり、必要なデータベース (やはり「パブリック」) にアクセスできます。オブジェクトレベルの権限を明示的に付与することはありません。[上記のアップデートを参照してください - これは無関係です]。

運用サーバー上でも、まったく同じ方法で NETWORK SERVICE を追加しました (パブリック データベース ロール、データベースへの明示的なアクセスを「パブリック」として)。それでも、この許可エラーが発生します。なぜ?!![上記のアップデートを参照 - 私が行った唯一の理由 しないでください 権限エラーが発生するのは、管理者として実行しているためです。]

そしてもちろん、それがローカルで動作するという事実が単に「幸運」である場合は、どの SP/テーブルにアクセスを許可するかを知る必要があります。私の予想ではSPは3人全員だと思います。 ない この表を参照してください。ただし、これを明示するドキュメントを (もう一度) 参照することをお勧めします。

役に立ちましたか?

解決

web.config で完全な接続文字列を ELMAH に提供していますか?その場合、どのデータベース ユーザーにアクセス許可を付与するかを正確に把握する必要があります。そして、はい、権限は 3 つの ELMAH ストアド プロシージャを実行することです...

私が使用した構成は次のとおりです。

<elmah>
    <errorLog type="Elmah.SqlErrorLog, Elmah" connectionStringName="elmah" />
</elmah>

<connectionStrings>
    <add name="elmah" connectionString="Data Source=XXX;Initial Catalog=XXX;User Id=XXX;Password=XXX;" providerName="System.Data.SqlClient" />
</connectionStrings>

他のヒント

ユーザー USER_NAME に実行権限を付与するために必要な SQL の例:

GRANT EXECUTE ON ELMAH_GetErrorsXml TO USER_NAME
GRANT EXECUTE ON ELMAH_GetErrorXml TO USER_NAME
GRANT EXECUTE ON ELMAH_LogError TO USER_NAME
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top