两个Web应用程序,写入事件日志时出错

时间:2016-10-11 16:23:06

标签: asp.net vb.net event-log

我有两个ASP.NET Web应用程序,我使用EventLog.WriteEntry和自定义源名称将自定义事件写入应用程序日志。

在我的编程机器和网络服务器上都可以在其中一个应用程序中运行,而在另一个应用程序中它不会 - 我得到一个安全例外:

  

[SecurityException:找不到源,但无法搜索部分或全部事件日志。无法访问的日志:安全。]

我想知道为什么会发生这种情况,两个Web应用程序都是相同的(据我所知)。与安全性观点的唯一区别是身份验证模式:一个使用Forms(有Eventlog.WriteEntry工作),一个使用Windows(这里它不起作用)。这可能是原因吗?

给予"每个人"对应用程序日志的读访问权限不会改变此行为。

1 个答案:

答案 0 :(得分:0)

您在Windows身份验证模式下的问题与这些问题基本相似:

System.Security.SecurityException when writing to Event Log

System.Security.SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.

该异常意味着您的网络应用程序尝试在事件日志中使用“source”给出的值,该值由于相应帐户的权限不足而尚未注册。

使用Windows身份验证模式执行事件日志任务时,您需要在NETWORK SERVICE密钥上为eventlog\Security帐户授予读取权限。以下是这些步骤:

  1. 打开Regedit(注册表编辑器)。
  2. 转到HKLM\SYSTEM\CurrentControlSet\services\eventlog\Security
  3. 右键单击分支,选择“权限”。
  4. 点击“添加”,找到名为NETWORK SERVICE的RDN或直接输入,然后添加该帐户。
  5. 在“网络服务权限”下,选中“读取”或“完全控制”以获得读取权限,然后应用更改。
  6. 在IIS主机上重新启动应用程序池。
  7. 如果仍然不够,请执行以下操作:

    1. 打开IIS管理器。查看Application Pools部分的标识列,它应该是LocalSystemNetworkService

    2. 当您需要更改身份时,右键单击带有Windows身份验证的应用程序池,选择“高级设置”。

    3. 在流程模型下,将ApplicationPoolIdentity更改为LocalSystemNetworkService,应用您的编辑并重新启动应用程序池。

    4. 注意:由于安全漏洞原因,NetworkService身份比LocalSystem更受欢迎。

      您也可以尝试在<trust level="Full" />文件中设置web.config,具体取决于安全考虑因素。

      如果上述所有解决方案仍无效,请在开发计算机上设置Visual Studio,或在Web服务器上部署应用程序以管理员权限运行,获得对Windows身份验证事件日志的完全访问权限。毕竟,这取决于您的选择,以确保采用适当的安全措施。