我有两个ASP.NET Web应用程序,我使用EventLog.WriteEntry和自定义源名称将自定义事件写入应用程序日志。
在我的编程机器和网络服务器上都可以在其中一个应用程序中运行,而在另一个应用程序中它不会 - 我得到一个安全例外:
[SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全。]
我想知道为什么会发生这种情况,两个Web应用程序都是相同的(据我所知)。与安全性观点的唯一区别是身份验证模式:一个使用Forms(有Eventlog.WriteEntry工作),一个使用Windows(这里它不起作用)。这可能是原因吗?
给予"每个人"对应用程序日志的读访问权限不会改变此行为。
答案 0 :(得分:0)
您在Windows身份验证模式下的问题与这些问题基本相似:
System.Security.SecurityException when writing to Event Log
该异常意味着您的网络应用程序尝试在事件日志中使用“source”给出的值,该值由于相应帐户的权限不足而尚未注册。
使用Windows身份验证模式执行事件日志任务时,您需要在NETWORK SERVICE
密钥上为eventlog\Security
帐户授予读取权限。以下是这些步骤:
HKLM\SYSTEM\CurrentControlSet\services\eventlog\Security
NETWORK SERVICE
的RDN或直接输入,然后添加该帐户。如果仍然不够,请执行以下操作:
打开IIS管理器。查看Application Pools
部分的标识列,它应该是LocalSystem
或NetworkService
。
当您需要更改身份时,右键单击带有Windows身份验证的应用程序池,选择“高级设置”。
在流程模型下,将ApplicationPoolIdentity
更改为LocalSystem
或NetworkService
,应用您的编辑并重新启动应用程序池。
注意:由于安全漏洞原因,NetworkService
身份比LocalSystem
更受欢迎。
您也可以尝试在<trust level="Full" />
文件中设置web.config
,具体取决于安全考虑因素。
如果上述所有解决方案仍无效,请在开发计算机上设置Visual Studio,或在Web服务器上部署应用程序以管理员权限运行,获得对Windows身份验证事件日志的完全访问权限。毕竟,这取决于您的选择,以确保采用适当的安全措施。