在ASP.NET程序中使用事件日志的条件——关于注册表的访问控制表
2010-08-01 11:52 Nana's Lich 阅读(1319) 评论(0) 编辑 收藏 举报近几天折腾了一个比较奇怪的东西,放在服务器上就出现莫名其妙的故障。
由于没法直接在服务器上调试,手边又没有服务器的镜像,就想到靠事件日志来记录运行过程中产生的异常来分析。
但是在最初的尝试中,总是会产生安全异常——根据提示检查.NET权限设置也没发现问题出在哪里……
在参考了一些文章、又经过一些探索之后,可以我发现:
1、对事件日志进行任何操作时必须具有读取事件日志服务的注册表项目的权限。
2、无论对日志进行何种操作,必须要具有对安全日志的注册表项目进行读取的权限。
3、创建新的日志和事件/消息源时必须具有对事件日志服务的注册表项目进行值写入的权限,同时还需要在其下创建子项目的权限。
需要注意的是:
一般情况下运行ASP.NET程序的程序池所使用的身份是Network Service或者ASPNET,而这两个身份是没有操作事件日志服务的注册表项目的权限的,所以在ASP.NET程序中使用事件日志之前必须设置相应的注册表项目,允许ASP.NET的程序池对其访问——事件日志服务在注册表中对应的路径是HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services\eventlog。
另外安全日志对应事件日志之的Security注册表项目,它的ACL并不直接继承自eventlog,是需要单独设置的。
在为eventlog添加了允许Network Service读写和创建子项目、为Security添加了允许Network Service进行读取的访问控制规则以后,我的ASP.NET应用程序就可以创建并写入事件日志了。
对于类似的问题,微软知识库中有一个建议的解决方法,是运行一个使用EventLogInstaller组件创建的独立的应用程序——不过本质上还是利用了管理员的特权来进行操作,在此就不再详细说明了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器