【问题标题】:Active Directory: The Principal Class - S.DS.AM vs S.DS.ADActive Directory:主体类 - S.DS.AM 与 S.DS.AD
【发布时间】:2018-02-13 04:43:11
【问题描述】:

我正在为 Active Directory 编写访问审计报告。我正在使用 LDAP 通过 SSIS 中的 C# 脚本组件将数据提取到 SQL Server 数据库中。这是我对 AD 的第一次重大尝试,所以我坦率地承认缺乏深入的知识。我试图通过询问那些对该主题有经验的人来消除盲点。如果我混淆了我的任何隐喻,请提前原谅我。

关于为所有用户检索数据,最好还是坚持使用 Principal 类,并通过 S.DS.AM 访问 GroupPrincipal、UserPrincipal 和 ComputerPrincipal(即具体类),还是获取所有内容更好来自 S.DS.AD(参见下面的参考资料)?我知道两者都是 S.DS 的子类,因此在使用 S.DS.AM 时可能会错过 S.DS.AD 中未包含的对象。是否有任何相关数据或对象包含在 S.DS.AD 中,但不包含在 S.DS.AM 中,这将有助于访问控制审计?另外,我知道如果 PageSize=1000,那么我可能需要使用 S.DS.AD,然后循环通过 S.DS.AM。

如果最好使用 S.DS.AM,有没有办法捕获任何已创建并从具体类中分出的抽象类或辅助类?我可以只使用 StructuralObjectClass 属性值吗?

S.DS.AD: https://msdn.microsoft.com/en-us/library/system.directoryservices.activedirectory(v=vs.110).aspx

S.DS.AM: https://msdn.microsoft.com/en-us/library/system.directoryservices.accountmanagement(v=vs.110).aspx

【问题讨论】:

  • 恕我直言,要求是选择标准的来源。有很多事情是不可能仅通过 AccountManagement 实现的,而 ActiveDirectory 程序集可以提供帮助(在您的问题中已经提到)。我建议您限制问题的范围,并询问您要达到的目标。
  • 问题是没有范围要求 - 公司只是想审核访问权限,让我自己弄清楚。因此,它的范围可以非常大,也可以非常窄。由于我有足够的空间来解决这个问题,因此我尝试将未来可能需要的项目包括在内,这样我就可以避免未来的开发工作并使用已经提供的数据,同时注意潜在的性能问题。因此,我试图根据其他人的经验来看看什么是最好的实现。

标签: c# sql-server active-directory ldap


【解决方案1】:

System.DirectoryServices.AccountManagement 命名空间是System.DirectoryServices 的包装器。命名空间包含涵盖程序员在使用 AD 时遇到的最常见情况的类。这些类旨在在中小型环境中执行一组有限的任务,并且存在性能问题。

例如,GroupPrincipal.Members 将在第一次调用时加载整个组成员,这在组可能包含 10-100k 个主体且范围检索是最佳选择的企业环境中可能不是所需的行为。

使用System.DirectoryServicesSystem.DirectoryServices.Protocols 允许您管理进程在与AD 通信时使用的资源(RAM、网络流量)。

System.DirectoryServices.ActiveDirectory 可以在每个环境中使用,因为这些类返回的数据量非常小(例如 Active Directory 架构、站点、域控制器)

【讨论】:

  • 我认为我不能直接使用 Principal 类,因为其中包含的方法需要 sAMAccountName 或其他一些输入。因此,我需要使用 DirectoryEntry.FindAll() 方法来识别所有用户,然后我可以通过 GroupPrincipal 查找所有计算机/用户映射并根据该数据构建交集表。但是,我需要确定如何通过用户、计算机和组这三个对象类别。我可能需要创建一个循环来设置 DirectorySearcher 过滤器。谢谢。
猜你喜欢
  • 2017-06-17
  • 1970-01-01
  • 1970-01-01
  • 2011-07-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多