如何讓 ELMAH 與 SQL Server 一起工作(權限問題)
我已經讓 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