2011-12-09 41 views
5

這可能不是SiteCore本身的問題,但我已將其包括在內以確保完整性。我使用應用程序池的自定義標識在IIS7下運行sitecore 6.3。我不能讓Sitecore將其日誌信息(使用默認的log4net設置)寫入eventlog。我按照這裏的建議:http://logging.apache.org/log4net/release/faq.html#Why%20doesn%27t%20the%20EventLogAppender%20work?,雖然它使得我的自定義身份成爲管理員組的一員,但我需要找到一種方法來讓它在沒有這種安全攻擊的情況下在生產環境中工作。使用非管理員帳戶的log4Net事件日誌權限問題

奇怪的是,我有一個MSI安裝它(在一個帳戶下運行,是一個管理員組的成員),並在我的事件日誌中創建正確的註冊表項,但儘管如此,我仍然得到當我使用自定義標識運行應用程序時(沒有成爲管理員的成員),出現以下錯誤。

log4net:ERROR DOMConfigurator: Could not create Appender [EventLogAppender] of type [log4net.Appender.EventLogAppender]. Reported error follows. 
System.Security.SecurityException: Requested registry access is not allowed. 
at Microsoft.Win32.RegistryKey.OpenSubKey(String name, Boolean writable) 
at System.Diagnostics.EventLog.GetEventLogRegKey(String machine, Boolean writable) 
at System.Diagnostics.EventLog.FindSourceRegistration(String source, String machineName, Boolean readOnly) 
at System.Diagnostics.EventLog.DeleteEventSource(String source, String machineName) 
at log4net.Appender.EventLogAppender.ActivateOptions() 
at log4net.Repository.Hierarchy.DOMHierarchyConfigurator.ParseAppender(XmlElement appenderElement) 
The Zone of the assembly that failed was: 
MyComputer 
log4net:ERROR DOMConfigurator: Appender named [EventLogAppender] not found. 

想我可以縮小它我授予每個人完全權限到以下注冊表項和子項註冊表權限問題,但它沒有工作,要麼:HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog

定製的身份是以下中的一員組:

  • 事件日誌讀取
  • IIS_USERS
  • 性能監視器用戶

我也看到了following question這似乎要求同樣的事情。微軟的文章似乎表明它可能是一個事件日誌中的ACL問題,並提供了有關如何更改SSDL的示例,但我寧願儘可能避免這種情況。

編輯: 我有另一臺服務器運行的日誌正在填充罰款。自定義身份是管理員的成員,所以我撤銷了這一點,並重新啓動,試圖故意破壞它,但我不能。 Config在兩個盒子上都是相同的,並且用於運行創建註冊表項的MSI的相同身份。在兩者上運行procmon(在執行IISReset並再次啓動應用程序池之後)檢查註冊表活動。奇怪的是 - 在工作箱上,你得到了477個名字,在錯誤的地方找不到我的事件源的記錄(應用程序和一個不同的自定義事件日誌「MyCompany」)。 「MyCompany \ MyCompany.SiteCore」沒有記錄它正在登錄的地方。雖然在破損的盒子上,它確實似乎在請求讀取正確的密鑰(雖然只有6次),但是您隨後得到Log4Net註冊表訪問錯誤。

+0

也許有一些額外的見解:對於某些無法解釋的原因,我的安裝程序隨機創建的註冊表子項(用於eventlog源名稱)已在1臺服務器上消失。它仍然在註冊表中(我已打開,雖然沒有刷新),當我點擊它時彈出一條消息:「Error Opening Key」:[Keyname]不能被打開。錯誤是阻止該鍵被打開。詳細信息:系統找不到指定的文件。 Log4Net消息更改爲:log4net:錯誤DOMConfigurator:找不到名爲[EventLogAppender]的附加程序。 – chrislewisdev

回答

4

據我所知,EventStores存儲在註冊表中,所以你只需要註冊表的寫權限來創建或刪除一個EventStore。這通常只需要一次,大多數應用程序將其作爲安裝過程的一部分進行創建,以便在正常執行過程中不需要以管理員身份運行應用程序。

但是,您的錯誤消息(在問題中)包括方法DeleteEventSource從中我會推斷/猜測EventSource確實存在,但在某些方面是錯誤的。因此,這可能是目前註冊爲寫入名爲MyCompany的事件日誌的文件,現在您正嘗試將其更改爲「MyCompany \ MyCompany.SiteCore」,該文件要求您刪除舊的事件源並創建一個新的事件源。

因此,聽起來您的安裝例程正在創建一個與您的應用程序實際使用的EventSource不同的EventSource。

如果這沒有幫助,那麼我會建議啓用internal logging for Log4net(但顯然不是eventlog),這可能會給你更多的信息。

僅給予註冊表項的完全權限是不夠的。 據Microsoft

要建立在Windows Vista中的事件源和更高版本或Windows Server 2003中,您必須具有管理權限。

此要求的原因是必須搜索所有事件日誌(包括安全性)以確定事件源是否唯一。從Windows Vista開始,用戶無權訪問安全日誌;因此會引發SecurityException。

從Windows Vista開始,用戶帳戶控制(UAC)確定用戶的權限。如果您是內置管理員組的成員,則會爲您分配兩個運行時訪問令牌:標準用戶訪問令牌和管理員訪問令牌。默認情況下,您處於標準用戶角色。要執行訪問安全日誌的代碼,您必須首先將您的權限從標準用戶提升到管理員。您可以在啓動應用程序時通過右鍵單擊應用程序圖標並指示您想以管理員身份運行來執行此操作。

+0

我相信這是正確的答案,但我仍然在掙扎。我已經檢查了我的wix腳本創建了正確的註冊表項,並且在運行procmon時它在\ eventlog \ CMS \ SiteCore上有讀取成功(請注意,我將源重命名爲簡化),但它會嘗試查看\ eventlog \應用程序\ sitecore並說「名稱未找到」。 (大概是dupe入門檢查)。如果您在名爲sitecore的應用程序中創建另一個源,則會引發刪除源錯誤。但沒有它,我只是讀取成功,沒有內部診斷失敗,沒有任何事件查看器... – chrislewisdev

+0

只是通過完成這篇文章的方式 - 我們確實得到了這個工作最終。 [sgmoore](http://stackoverflow.com/users/125759/sgmoore)的答案是正確的 - 在我們的案例中,它試圖刪除一個事件源,因爲我們已經多次重命名它。徹底清理事件日誌中的註冊表項,然後重新啓動服務器,這是解決問題所需的。 – chrislewisdev

2

我認爲,與Apache documentation相反,log4net是否需要對註冊表進行寫入操作 - 或者至少在我的情況下是這樣。爲了證明這一點,我在服務器上備份了註冊表,並在授予IIS管理員權限,然後再啓動sitecore。果然,它開始很好地記錄到事件日誌,然後當我再次導出註冊表來運行差異時,就有了區別。

對我的事件源eventlogmessage文件中的值已經更新來自:

C:\Windows\Microsoft.NET\Framework\v2.0.50727\EventLogMessages.dll

C:\Windows\Microsoft.NET\Framework64\v2.0.50727\EventLogMessages.dll

所以,我認爲僅僅改變由註冊表中的該值手會工作。

但它沒有。

所以我運行procmon我有兩臺服務器:A =工作的,B =失敗的。果然,在服務器B我有一個線,說: Operation: RegOpenKey, Path: HKLM\System\CurrentControlSet\Services\EventLog, Desired Access:Read/Write, Result: ACCESS DENIED.

我已經與服務器A通過跟蹤和完全相同的地方,關鍵是要求與期望訪問:讀。

結論: 似乎不可避免,我將需要授予生產我的應用程序池標識管理員權限至少足夠的時間編程做必要的註冊表從log4net的內寫的第一次。我不知道爲什麼管理員;我試圖授予我的自定義應用程序在註冊表中的整個事件日誌節點的完全權限,無濟於事。它似乎做了一些我無法確定或者拒絕的事情。然後,我將在開始記錄並監視後續安裝是否會在之後淘汰功能後立即撤銷此特權。 (希望不是)。

如果有人對此行爲有任何瞭解,將不勝感激。

相關問題