两个 Web 应用程序,一个写入事件日志时出错
Two web applications, one error when writing to the eventlog
我有两个 ASP.NET Web 应用程序,在这两个应用程序中我都使用 EventLog.WriteEntry 和自定义源名称来将自定义事件写入应用程序日志。
在我的编程机器和网络服务器上,这在一个应用程序中有效,在另一个应用程序中无效 - 我遇到安全异常:
[SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.]
我想知道为什么会这样,两个 Web 应用程序是相同的(据我所知)。从安全的角度来看,唯一的区别是身份验证模式:一种使用 Forms(Eventlog.WriteEntry 有效),一种使用 Windows(此处无效)。会是这个原因吗?
授予 "everyone" 对应用程序日志的读取权限不会改变此行为。
您在 Windows 身份验证模式上遇到的问题与这些问题基本相似:
System.Security.SecurityException when writing to Event Log
异常意味着您的网络应用程序试图使用给定的值写入事件日志 "source" 由于相应帐户的权限不足,该值尚未注册。
当使用Windows 身份验证模式执行事件日志任务时,您需要在eventlog\Security
密钥上授予NETWORK SERVICE
帐户的读取权限。以下是这些步骤:
- 打开 Regedit(注册表编辑器)。
- 转到
HKLM\SYSTEM\CurrentControlSet\services\eventlog\Security
- 右键单击分支,select "Permissions"。
- 点击"Add",找到名为
NETWORK SERVICE
的RDN或者直接输入,然后添加账号。
- 在 "Permissions for Network Service" 下,选中 "Read" 或 "Full Control" 以授予读取权限,然后应用更改。
- 在 IIS 主机上重新启动您的应用程序池。
如果还不够,请执行以下操作:
打开 IIS 管理器。检查 Application Pools
部分的身份列,它应该给出 LocalSystem
或 NetworkService
.
需要更改身份时,右键单击具有Windows身份验证的应用程序池,选择高级设置。
在进程模型下,将 ApplicationPoolIdentity
更改为 LocalSystem
或 NetworkService
,应用您的编辑并重新启动应用程序池。
注意:由于安全漏洞原因,NetworkService
身份比 LocalSystem
更受欢迎。
您也可以尝试在 web.config
文件中设置 <trust level="Full" />
,这取决于安全考虑。
如果上述所有解决方案仍然无效,请将开发机器上的 Visual Studio 或 Web 服务器上部署的应用程序设置为 运行 作为管理员权限,获得对 Windows 身份验证的完全访问权限事件记录日志。毕竟,确保应用适当的安全措施取决于您的选择。
我有两个 ASP.NET Web 应用程序,在这两个应用程序中我都使用 EventLog.WriteEntry 和自定义源名称来将自定义事件写入应用程序日志。
在我的编程机器和网络服务器上,这在一个应用程序中有效,在另一个应用程序中无效 - 我遇到安全异常:
[SecurityException: The source was not found, but some or all event logs could not be searched. Inaccessible logs: Security.]
我想知道为什么会这样,两个 Web 应用程序是相同的(据我所知)。从安全的角度来看,唯一的区别是身份验证模式:一种使用 Forms(Eventlog.WriteEntry 有效),一种使用 Windows(此处无效)。会是这个原因吗?
授予 "everyone" 对应用程序日志的读取权限不会改变此行为。
您在 Windows 身份验证模式上遇到的问题与这些问题基本相似:
System.Security.SecurityException when writing to Event Log
异常意味着您的网络应用程序试图使用给定的值写入事件日志 "source" 由于相应帐户的权限不足,该值尚未注册。
当使用Windows 身份验证模式执行事件日志任务时,您需要在eventlog\Security
密钥上授予NETWORK SERVICE
帐户的读取权限。以下是这些步骤:
- 打开 Regedit(注册表编辑器)。
- 转到
HKLM\SYSTEM\CurrentControlSet\services\eventlog\Security
- 右键单击分支,select "Permissions"。
- 点击"Add",找到名为
NETWORK SERVICE
的RDN或者直接输入,然后添加账号。 - 在 "Permissions for Network Service" 下,选中 "Read" 或 "Full Control" 以授予读取权限,然后应用更改。
- 在 IIS 主机上重新启动您的应用程序池。
如果还不够,请执行以下操作:
打开 IIS 管理器。检查
Application Pools
部分的身份列,它应该给出LocalSystem
或NetworkService
.需要更改身份时,右键单击具有Windows身份验证的应用程序池,选择高级设置。
在进程模型下,将
ApplicationPoolIdentity
更改为LocalSystem
或NetworkService
,应用您的编辑并重新启动应用程序池。
注意:由于安全漏洞原因,NetworkService
身份比 LocalSystem
更受欢迎。
您也可以尝试在 web.config
文件中设置 <trust level="Full" />
,这取决于安全考虑。
如果上述所有解决方案仍然无效,请将开发机器上的 Visual Studio 或 Web 服务器上部署的应用程序设置为 运行 作为管理员权限,获得对 Windows 身份验证的完全访问权限事件记录日志。毕竟,确保应用适当的安全措施取决于您的选择。