在 IIS 8 上托管的 ASP.NET Web 应用程序上读取系统事件日志条目时访问被拒绝

Posted

技术标签:

【中文标题】在 IIS 8 上托管的 ASP.NET Web 应用程序上读取系统事件日志条目时访问被拒绝【英文标题】:Access denied when reading system event log entries on ASP.NET web application hosted on IIS 8 【发布时间】:2018-07-21 19:09:17 【问题描述】:

我开发了一个非常简单的ASP.NET Web 应用程序,它可以读取系统事件日志条目。

当我从 VS 2017(托管在 IIS Express 中)调试或运行它时,我能够毫无问题地读取日志条目。

一旦我在IIS 8 上部署/发布此 asp.net Web 应用程序并尝试读取系统事件日志条目,它就不起作用了。 如果我检查事件查看器,我会得到类似这样的信息(翻译自西班牙语):

System.InvalidOperationException:无法在计算机上打开应用程序记录 Windows 没有提供错误代码。 ---> System.ComponentModel.Win32Exception: 拒绝访问"

我已阅读其他问题,但与写入事件日志有关。我只是对能够读取系统事件日志条目感兴趣。 我想这与权限有关,但我不知道我必须设置哪些权限以及设置给哪个用户。

这是我的代码的一些部分:

System.Diagnostics.EventLog  eventLog = new EventLog(LogName, machineName);
...
EventLogEntryCollection entries = eventLog.Entries; //This is where I get the Acces denied Exception.

答案(解决方法)

这可能不是解决它的正确方法(出于安全问题),但目前它是一个 internal 应用程序,我已经让它像这样工作。也就是说,通过在我的 web.config 文件中使用impersonate 从几台远程机器读取日志事件

<system.web>   
   <identity impersonate="true" userName="SomeDomainUserWithRigtsToread" password="itsPwd"/>

【问题讨论】:

您需要权限才能读取事件日志。当您调试 Web 应用程序时,它会在您的帐户下运行并拥有您的权限。在生产中,它在应用程序池的帐户下运行并使用 its 权限。您需要允许应用程序池帐户读取事件日志或使用具有此权限的帐户。 我无法(可能缺乏专业知识)允许应用程序池帐户读取事件日志。我已经通过使用impersonate整理出来 很高兴您找到了答案并在这里告诉我们????,但是您可以将那部分(您添加到问题中)移到答案中吗?这是一种常见的做法,而且比把它绑在问题上更清楚。 感谢@PeterB 就如何正确回答这个问题提供反馈。 【参考方案1】:

注意:这可能不是解决它的正确方法(对于安全问题),但目前它是一个内部应用程序,我已经做了工作,即通过在我的web.config文件上使用impersonate从几台远程机器读取日志事件

<system.web>   
   <identity impersonate="true" userName="SomeDomainUserWithRigtsToread" password="itsPwd"/>

【讨论】:

以上是关于在 IIS 8 上托管的 ASP.NET Web 应用程序上读取系统事件日志条目时访问被拒绝的主要内容,如果未能解决你的问题,请参考以下文章

如何将非 www 域重定向到 Azure 上托管的 asp.net mvc 中的 WWW 域?

WCF REST - 在 IIS 6 上托管的问题

IIS 上托管的 WCF 服务和 IIS 上的客户端网站

访问本地 IIS 上托管的 WCF 服务时出错:“相对 URI 不支持此操作。”

Asp.net core 2.1 Web App 无法在 IIS 上正确呈现

移动 Safari 发出多个视频请求