【问题标题】:Detect EventLog permissions before calling EventLog.SourceExists在调用 EventLog.SourceExists 之前检测 EventLog 权限
【发布时间】:2012-05-01 08:51:51
【问题描述】:

我想从 ASP .NET 应用程序记录到应用程序事件日志。我想先调用 EventLog.SourceExists 来判断一个事件源是否存在,如果不存在则创建它。

如 MSDN (http://msdn.microsoft.com/en-us/library/6s7642se.aspx) 中所述: "要在 Windows Vista 及更高版本或 Windows Server 2003 中搜索事件源,您必须具有管理权限。 此要求的原因是必须搜索所有事件日志,包括安全性,以确定事件源是否唯一。从 Windows Vista 开始,用户无权访问安全日志;因此,会引发 SecurityException。"

在我的例子中,NetworkService 用户没有管理员权限,因此 EventLog.SourceExists 会抛出 MSDN 中记录的 SecurityException。

我的问题是:我怎样才能对 EventLog.SourceExists 的调用进行防御性编码? 在调用 EventLog.SourceExists 之前,我可以先调用一些东西来检查我是否有权搜索事件源?

或者是我捕获 SecurityException 并在 catch 块内采取其他操作的唯一选择,例如登录到现有的事件源,例如资料

谢谢

凯文

【问题讨论】:

    标签: asp.net permissions event-log


    【解决方案1】:

    您一定要写入 Windows 应用程序事件日志吗?默认情况下存在的安全限制确实使这很难做到。每次我在新 VM 上进行开发时,我都必须创建一个注册表项以允许 NETWORK_USER 帐户写入日志,并且一旦您将应用程序滚动到实时服务器(可能不需要进行大规模注册表更改)好主意)那你就被斯诺克了。

    此外,经验告诉我,Windows 事件日志并不是最友好的记录/调试环境。对于通宵运行的服务器应用程序,我倾向于将所有事件记录到一个 html 文件中,以便第二天可以读取,对于 Web 应用程序,我使用自定义数据库并将所有事件发送到该文件。

    【讨论】:

    • 不,我不必使用事件日志。我的公司公开了一个日志库。目的是在开发过程中,应用程序可以使用此库来使用事件日志进行日志记录(如果需要),仅用于测试,假设他们此时可能没有日志记录数据库设置。在生产中,应用程序不应该使用事件日志,它们应该始终记录到数据库。但是,某些应用程序可能会在开发期间将其代码部署到测试服务器(例如),并且事件日志的日志记录停止工作,因为它们对权限的控制与本地计算机不同。
    • 我基本上是在尝试解决我是否应该围绕这个编写代码,或者从不尝试在日志库中创建自定义事件源,而只是登录到可能的“信息”事件源......感谢您的回复顺便说一句!
    • 不客气;很高兴分享我的(诚然有限的)知识(投票会很好)。如果您确实需要记录到事件日志,那么我建议您创建一个自定义事件日志并记录到该日志中 - 不要使用主应用程序事件日志。但是,正如您所说,一旦您部署到测试服务器,安全性就会阻止您的应用程序进行日志记录,因此我会探索其他解决方案(我在上面描述过),因为它们更加灵活。
    猜你喜欢
    • 2021-07-02
    • 1970-01-01
    • 2017-06-06
    • 2020-05-19
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多