2016-10-11 45 views
0

我有两个ASP.NET Web应用程序,并且都使用带自定义源名称的EventLog.WriteEntry将自定义事件写入应用程序日志。两个Web应用程序,写入事件日志时出现一个错误

我的编程机器无论在这个工程中得到应用之一,它没有其他的Web服务器 - 我得到一个安全异常:

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

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

给“每个人”读取应用程序日志访问权限不会改变这种行为。

+0

这两个Web应用程序是否在同一个应用程序池下运行?如果没有,那么这两个应用程序池帐户是否具有与机器/日志相同的访问级别? –

+0

是的,两者都使用相同的应用程序池,这让我感到困惑。它的工作的一个原因是,我选择了一个现有的源名称 - 见下面我的意见...... – Jan

回答

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.

异常意味着你的Web应用程序试图用给定的值在事件日志中写的“源“由于对应帐户的权限不足而未被注册。

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

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

如果仍然不够,做如下动作:

  1. 打开IIS管理器。检查Application Pools部分的标识列,应该给出LocalSystemNetworkService

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

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

NB:NetworkService同一性,更优选至LocalSystem由于安全漏洞的原因。

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

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

+0

大声笑,我才意识到,我意外地为我的自定义源选择现有的源名称。所以这就是为什么它适用于一个应用程序,而不是另一个应用程序。最后,我只是在HKLM \ SYSTEM \ CurrentControlSet \ services \ eventlog \ Application下创建了两个自定义源名称作为子项,并且它在不更改应用程序池标识或注册表项权限的情况下工作。尽管感谢您的帮助! – Jan

相关问题