c# - 更有效地监视 Active Directory 中的组成员身份 (C# .NET)

标签 c# .net active-directory

我有一个作为 Windows 服务编写的 Active Directory 同步工具 (.NET 2.0/C#),我已经为此工作了一段时间,最近的任务是添加基于更改驱动事件的能力组成员。基本场景是用户与安全数据库同步,当组成员身份发生变化时,用户需要更改其访问权限(即,如果我现在是“IT 员工”的成员,那么我应该自动获得对服务器机房,如果我被从该组中移除,那么我应该自动失去对服务器机房的访问权限。

问题是,当对组执行 DirectorySynchronization 时,您会收到已添加/删除成员的组,并且从那里获取成员列表时,您会返回该组中所有成员的列表,而不仅仅是已添加或删除的成员。这导致我遇到了一个效率问题——为了知道是否添加或删除了用户,我必须在本地保留每个组和所有成员的列表,并将其与当前列表进行比较以查看谁被添加或删除了。添加(不在本地列表中),以及谁已被删除(在本地列表中,不在当前成员列表中)。

我正在讨论是否仅将组成员身份详细信息存储在内存中的 DataSet 中,并在每次处理新的成员身份更改时写入磁盘。这样,如果服务停止/崩溃或机器重新启动,我仍然可以通过将磁盘上的最后信息与当前组成员列表中的信息进行比较,来了解安全数据库中 Active Directory 的当前状态。然而,这似乎非常低效 - 遍历组中的每个成员以与数据集中的内容进行比较,然后每次列表发生更改时将更改写入磁盘。

有没有人处理过这种情况?有什么方法我还没有找到只检索小组成员的增量吗?在这种情况下,您会怎么做才能确保您不会错过任何更改,同时尽可能减少对性能的影响?

编辑:AD 可能包含 500 个用户,它可能包含 200,000 个用户 - 这取决于客户,最重要的是普通用户是多少组的成员

最佳答案

您可以在组策略编辑器中设置对账户修改成功的审核

然后您可以监控安全日志中的条目并处理有关帐户修改的日志条目。

例如

        EventLog myLog = new EventLog("Security");

        // set event handler
        myLog.EntryWritten += new EntryWrittenEventHandler(OnEntryWritten);
        myLog.EnableRaisingEvents = true;

确保您有权访问安全事件日志 http://support.microsoft.com/kb/323076

关于c# - 更有效地监视 Active Directory 中的组成员身份 (C# .NET),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/85724/

相关文章:

c# - 找不到类型或命名空间名称 'DevExpress' -- 错误

c# - 此 WPF 代码能否受益于 Parallel.For 以及如何受益?

.net - 对于开发者来说,学习/使用 SSIS 值得吗?

c# - Unity 在向 OWIN 添加 Active Directory 访问权限时尝试实例化枚举参数

active-directory - 如何使用 LDAP 2.0 插件为 SonarQube 5.6.3 配置 Active Directory?

使用 Windows Azure AD 进行 iOS 应用程序身份验证

c# - MVC 重定向结果

c# - 将变量传递给另一种形式

c# - 使用 OpenXML 从 Excel 中删除公式

c# - 如何将静态文本设置为JsonResult?