Asp.net

如何讓 ELMAH 與 SQL Server 一起工作(權限問題)

  • April 3, 2014

我已經讓 ELMAH 在我的 (Cassini) 開發伺服器上工作,並且對它非常滿意,但是現在我正試圖將所有內容都轉移到我的生產伺服器 (IIS7) 上,蜜月期看起來已經結束了。

我已經克服了 IIS7 的“陷阱”,坦率地說,這在文件中可以更好地突出顯示,如果我只使用記憶體日誌,那麼它就可以工作。

但是,我試圖讓它使用 SQL Server 日誌(就像我在我的開發系統上所做的那樣),並且我收到瞭如下錯誤:

對象 ELMAH_GetErrorsXml 的 EXECUTE 權限被拒絕

好吧,好吧。我知道如何授予數據庫權限,但我真的很難理解我需要授予訪問權限的使用者和儲存的過程/表。

真正讓我困惑的是,我不需要做任何這樣的事情來讓它在我的開發伺服器上工作。我能看到的唯一區別是,在我的開發伺服器上,它似乎連接為 NT AUTHORITY\IUSR,而在我的生產伺服器上,它似乎連接為 NT AUTHORITY\NETWORK SERVICE。(它只是使用受信任的連接,所以我沒有明確配置它來做到這一點 - 我認為它與 Web 伺服器有關)。更新:我已經確定,因為我使用的是 Cassini,它實際上是以我(管理員)而不是 IUSR 身份登錄的,這解釋了為什麼我沒有遇到任何權限問題。

在我的開發伺服器上,IUSR 帳戶是公共數據庫角色的成員,並且可以訪問所需的數據庫(再次稱為“公共”)。沒有明確授予對象級權限。

$$ See update above - this is irrelevant $$. 在我的生產伺服器上,我以完全相同的方式添加了 NETWORK SERVICE(公共數據庫角色,對數據庫的顯式訪問為“公共”)。然而,我得到這個權限錯誤。為什麼?!![請參閱上面的更新 - 我沒有收到權限錯誤的唯一原因是因為我以管理員身份執行]。

而且,當然,如果它在本地工作的事實只是“運氣”,我將需要知道要授予訪問哪些 SP/表。我的猜測是所有 3 個 SP,而不是表,但最好(再次)看到一些明確說明這一點的文件。

您是否在 web.config 中為 ELMAH 提供了完整的連接字元串?如果是這樣,您應該確切地知道向哪個數據庫使用者授予權限,對吧?是的,權限將是執行三個 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

引用自:https://stackoverflow.com/questions/2630071