我正在尝试在我的c#应用程序中实现一个日志记录界面,它将事件记录到本地或远程的“Windows事件记录”。本地没有问题,因为System.Diagnostics是一个易于使用的命名空间。
但是,在远程计算机上执行此操作(登录其他计算机的Windows日志)会带来身份验证和授权问题,即“访问被拒绝”。这是可以理解的,因为让每个人都添加日志是不合逻辑的。
我知道创建一个新的事件文件夹和源只能在本地完成,我已经完成了(让我们称之为“我的应用程序”。我也开始了“远程注册”服务。
为方便起见,我一直在使用'eventcreate'工具测试日志记录功能,以便推断出允许的内容,什么不是。在“以管理员身份运行”cmd。
eventcreate /s myLogServer /id 999 /T Error /L "My Application" /so "My Application" /d "Log Test"
这自然会因“错误:访问被拒绝”而失败。当我添加
/u mydomain\myLogServer /p myPassword
,然后它工作正常。但是,我自然不想提供myLogServer的管理员凭据。我更喜欢创建一个受限制的用户,甚至更好,通过客户端机器使用Windows身份验证(希望当我不输入任何/ u / p时会发生什么)。
问题:如何设置它以便只有指定的用户才能将日志写入指定的日志文件夹? 尝试对注册表项设置权限(HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ eventlog ..)。 尝试设置事件日志文件的权限(* .evtx)。
子问题:我是否需要在c#代码中模拟指定的用户才能获得授权,或者有没有办法将身份验证详细信息添加到EventLog对象中?
答案 0 :(得分:0)
根据TechNet here:
在WindowsServer®2003,Windows Vista和WindowsServer®2008中,可以自定义计算机上每个事件日志的权限。此功能在以前版本的Windows中不可用。访问控制列表(ACL)作为安全描述符定义语言(SDDL)字符串存储在名为“CustomSD”的REG_SZ值中,用于注册表中的每个事件日志。