EventLog写入权限

时间:2013-01-09 19:54:47

标签: c# .net service windows-services event-log

我的问题与Windows事件日志的写权限有关。 我已经查看了几个这样的帖子,并找到了一些方法来解决我的问题,但这些都不适用于我目前的情况。

我在.NET 4.0中使用C#。我使用EventLog类: EventLog class

简而言之,我需要查看是否有方法使用经过身份验证的用户和密码进行模拟或身份验证,以达到我需要写入事件日志的权限。服务器将始终位于Windows Server系列中,但版本可能会有所不同。

我的应用程序是运行以下帐户之一的Windows服务:

  • 网络服务
  • 本地服务
  • 本地系统
  • 受限制权限的用户(用户或用户) 域用户组)

以下是我的其他一些标准:

  • 我不能将服务用户作为管理员,甚至服务器上的本地管理员
  • 我无法修改或更改注册表
  • 我无法更改服务器上的UAC或任何组策略
  • 我有一个拥有管理员权限的用户,但是它不能用于运行服务
  • 事件日志将始终是本地事件日志,而不是远程计算机
  • 日志可能始终是“应用程序”日志
  • 来源可能会有所不同,这似乎是问题的核心

我的问题是:这可能吗?

我可以在我的代码中冒充用户来实现我的需求吗? 我这样做是为了连接到Web服务,登录到smtp服务器,当然还有数据库等。

我偶然发现了这堂课: EventLogPermission Class

但我似乎无法对如何使用该课程有一个很好的概念。

我希望我表达了我的问题。由于我的标准,我不认同这是另一篇文章的副本。

2 个答案:

答案 0 :(得分:18)

默认情况下,任何经过身份验证的用户都可以写入应用程序事件日志。但是,只有管理员才能创建新的事件源。如果在服务安装时知道所有事件源,我建议提前注册这些源,然后您将全部设置。注册是对EventLog.CreateEventSource的简单调用。

如果您在事件源上需要更多灵活性,则可以自定义权限。可以通过调整注册表项来自定义这些默认值:

  HKEY_LOCAL_MACHINE\System\CurrentControlSet\Services\Eventlog\Application\CustomSD

KB Article中描述的流程。作为操作系统一部分的wevtutil工具,可在Server 2008及更高版本上使用,使其比通过regedit更容易。

答案 1 :(得分:1)

答案显示为" no"。

我意识到没有好办法以我要求的方式解决这个问题。必须完成手动工作。

因此,我为此方案选择的解决方案是,无法以管理员身份运行服务或进行手动注册表编辑的客户无法使用记录到事件日志的功能。我将能够启用和禁用配置中的日志记录。

管理员用户和注册表编辑对我来说是众所周知的方式,但正如我所说的那样,我试图避免。但是,就目前看来,这次根据我的标准是不可能的。