Asp.net

寫入事件日誌時出現 System.Security.SecurityException

  • August 13, 2009

我正在嘗試將 ASP.NET 應用程序從 Server 2003(和 IIS6)移植到 Server 2008(IIS7)。

當我嘗試訪問瀏覽器上的頁面時,我得到了這個:

“/”應用程序中的伺服器錯誤。

安全異常

說明:應用程序試圖執行安全策略不允許的操作。要授予此應用程序所需的權限,請聯繫您的系統管理員或在配置文件中更改應用程序的信任級別。

異常詳細資訊:System.Security.SecurityException:找不到源,但無法搜尋部分或全部事件日誌。無法訪問的日誌:安全性

源錯誤:

在執行目前 Web 請求期間生成了未處理的異常。可以使用下面的異常堆棧跟踪來辨識有關異常起源和位置的資訊。

堆棧跟踪:

[SecurityException:找不到源,但無法搜尋部分或全部事件日誌。無法訪問的日誌:安全性。]

System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly) +562 System.Diagnostics.EventLog.SourceExists(String source, String machineName) +251

[剪輯]

這些是我為嘗試解決它所做的事情:

  1. 授予“所有人”對密鑰的完全訪問權限HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\EventLog\Security。這行得通。但自然我不能在生產中做到這一點。所以我在執行應用程序幾分鐘後刪除了“所有人”權限,錯誤再次出現。
  2. 我在安裝過程中使用提升的權限在應用程序日誌和安全日誌中創建了源(並通過 regedit 驗證了它存在),但錯誤仍然存在。
  3. 我在文件中為應用程序提供了完全信任級別web.config(並使用appcmd.exe),但無濟於事。

有沒有人知道在這裡可以做什麼?

PS:這是對這個問題的跟進。我遵循給定的答案,但無濟於事(見上面的#2)。

解決方案是授予“網路服務”帳戶對 EventLog/Security 密鑰的讀取權限。

Network Service授予對EventLog/Security密鑰的讀取權限(如 Firenzi 和 royrules22 所建議),請按照http://geekswithblogs.net/timh/archive/2005/10/05/56029.aspx中的說明進行操作

  1. 打開系統資料庫編輯器:

  2. Start然後選擇Run

  3. 輸入regedt32regedit

  4. 導航/展開到以下鍵:

HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Eventlog\Security 3. 右鍵點擊此條目並選擇權限 4. 添加Network Service使用者 5. 授予它讀取權限

**更新:**上述步驟在開發人員機器上是可以的,您不使用部署過程來安裝應用程序。

但是,如果您將應用程序部署到其他機器,請考慮按照SailAvidNicole Calinoiu 的回答中的建議在安裝期間註冊事件日誌源。

我正在使用 PowerShell 函式(在 Octopus Deploy.ps1 中呼叫)

function Create-EventSources() {
   $eventSources = @("MySource1","MySource2" )
   foreach ($source in $eventSources) {
           if ([System.Diagnostics.EventLog]::SourceExists($source) -eq $false) {
               [System.Diagnostics.EventLog]::CreateEventSource($source, "Application")
           }
   }
}

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