0

基本上,我正在开发一个用于管理 Active Directory 的应用程序,我添加了一个很大的“安全”层,即能够将允许他们访问/搜索的 OU GUID 分配给特定用户。

我现在面临的问题是,考虑到有时会收集大量 GUID(1200ish)并且仅从这些特定的 OU 返回结果,似乎没有一种很好的方式来查询 AD。

有谁知道是否有一种方法可以使用多个 DirectorySearchers 或类似方法来实现这一目标而不会对性能造成太大影响?

-- 这在 SQL 中很容易...... :-/

4

1 回答 1

0

有几种方法可以做到这一点:

  1. 如果要使用多个DirectorySearcher对象,则可DirectorySearcher以为要搜索的每个 OU 创建一个对象,并将SearchRoot每个对象设置为要搜索的 OU。
  2. 在整个域上进行一次搜索,并在获得结果后过滤掉您不想显示的结果。这可能会比选项 1 执行得更快。
  3. 直接更改 AD 中的权限。如果您不希望用户查看 OU 中的对象,请修改该 OU 的权限,使其无法读取。然后,您只需正常进行所有搜索,而不必担心过滤掉任何内容。这是假设您使用用户自己的凭据来查询 AD。

但是这里的事情确实变得复杂了。如果您不希望用户 A 看到 OU B 中的对象,您可以对用户 A 隐藏该 OU,当然。但是用户 A 可能仍然能够看到其中包含来自 OU B 的用户的组。所以用户 A 仍然会看到 OU B 存在的证据。所以,

  • 如果您选择选项 1 或 2,那么您在查看组成员身份时也必须过滤来自组的结果。

  • 如果您使用选项 3,它可能会破坏 PowerShell 脚本(如果他们曾经使用过它们),因为 PowerShell 会尝试读取组中的每个成员并在不能读取时崩溃。

于 2020-05-22T12:41:30.707 回答