
Monitoring group membership in Active Directory more efficiently (C# .NET)我有一个作为Windows服务编写的Active Directory同步工具(.NET 2.0 / C#),我已经使用了一段时间,最近又被赋予了添加功能来基于更改来驱动事件。小组成员。基本方案是用户与安全数据库同步,并且当组成员身份更改时,用户需要更改其访问权限(即,如果我现在是" IT人员"的成员,那么我应该自动获得对服务器机房,如果我被从该组中删除,那么我应该自动失去对服务器机房的访问权限。 问题是,对组执行DirectorySynchronization时,您会收到添加/删除了成员的组,从那里当您获取成员列表时,您不仅可以获取该组中所有成员的列表,还可以已添加或删除的成员。这导致我遇到一个效率问题,即为了知道是否已添加或删除用户,我必须在本地保留每个组和所有成员的列表,并将其与当前列表进行比较以查看谁曾被已添加(不在本地列表中)和已删除的人(在本地列表中,不在当前成员列表中)。 我只是想将组成员资格详细信息存储在内存中的DataSet中,并在每次处理新的成员资格更改时将其写入磁盘。这样,如果服务停止/崩溃或计算机重新启动,我仍然可以通过将磁盘上的最新信息与当前组成员资格列表中的信息进行比较,来获得安全性数据库中Active Directory的当前状态。但是,这似乎很糟糕,效率低下-遍历组中的每个成员与数据集中的内容进行比较,然后每当列表发生更改时便将更改写入磁盘。 以前有人处理过这种情况吗?有什么方法我没有发现只检索一组增量成员吗?在这种情况下,您将采取什么措施以确保您不会丢失任何更改,同时又能将性能降到最低? 编辑:AD可能包含500个用户,它可能包含200,000个用户-它取决于客户,最重要的是平均用户是 成员的组数 您可以在组策略编辑器中设置审核以成功修改帐户 然后您可以监视安全日志中的条目,并处理有关帐户修改的日志条目。 例如
确保您具有访问安全事件日志的特权 您知道有哪些产品可以帮助您进行目录同步和用户配置(使用Google的术语)?在这里以及所有这些方面都没有被发明出来,您可能不得不在当前的气候下证明投资的合理性,但是,就长期而言,开发和维护已经存在商业解决方案的代码并不是总能以最具成本效益的方式进行的跑步。 不是所有的支持事件/供应,但它们确实支持跟踪更改并进行分发:在这些功能之上创建事件解决方案并不重要。 Microsoft具有Identity Integration Server(MISS),该产品将作为Identity Lifecycle Manager的一部分进行重新打包。它最初是基于更通用的元数据/主数据管理产品构建的,但是是可行的。 IBM具有Tivoli Directory Integrator(但您需要跟上每两年一次的名称更改!)。 Oracle有一个Oracle Identity Manager,Sun有一个Identity Manager。这些产品大多数都是主要参与者购买的领先产品,以填补??其投资组合中的空白。 当然,这些是企业级产品,意味着大型 我要说的是,这取决于您需要跟踪多少个活动目录对象。如果数量很少(少于1000个用户),则可以将状态数据序列化到磁盘上,而对性能的影响不大。如果您要处理大量对象,则在诸如SQL Express之类的环境中创建简单的持久性架构并使用它可能会更有效。 |