代码之家  ›  专栏  ›  技术社区  ›  DrStalker

如何使用筛选器避免Active Directory中的子OU?

  •  17
  • DrStalker  · 技术社区  · 17 年前

    我有一个应用程序从Active Directory中的ou中提取用户信息。它使用的参数是搜索的基础和筛选字符串。

    我有一个要从中获取信息的ou,但我要避免以下子ou:

    需要的

    用户来自 OU=People,DC=mydomain,DC=com

    不想要

    用户来自 OU=Evil,OU=People,DC=mydomain,DC=com

    我知道这可以通过重写执行teh导入的应用程序来停止搜索sub-ou来完成,但是是否有任何方法可以通过搜索上的LDAP过滤器来完成呢?有点像( DistinguishedName !contains "Evil" )或者类似的方法,允许我根据用户的路径排除用户,而不是过滤用户的属性。

    5 回复  |  直到 8 年前
        1
  •  12
  •   Liam Joshua    8 年前

    如果你在用 System.DirectoryServices ( .Protocols )在.NET中,您可以设置 SearchScope 到 OneLevel 只搜索你的人(而不是孩子)。但如果你有的话那就不行了 OU=Good,OU=People,DC=mydomain,DC=com …

    第二个选项是查询所有子ou:s的人员ou( objectClass=organizationalUnit )然后发出多个搜索请求;每个请求一个(除了“邪恶的”请求)。

    编辑: @geoffc-这将很难实现。默认情况下,所有经过身份验证的用户都具有对Active Directory中所有对象的读取权限。仅仅在邪恶的ou上设置一个“拒绝读取”并不能做到这一点,因为经过身份验证的用户的读取权限是在单个用户对象上设置的(在本例中),因此优先于ou上设置的拒绝acl。实际上,您必须在邪恶的ou中的每个对象上设置deny read acl,并始终确保添加到目录中的新对象获得相同的deny权限集。您可以编辑Active Directory架构并删除经过身份验证的用户的权限,但这将破坏许多其他内容(包括Exchange),而且Microsoft不支持这些内容。

        2
  •  5
  •   kRiZ    10 年前

    以下是技巧:

    (&(objectClass=user)(!(distinguishedName:=%Evil%)))
    

    我在建立一个地址簿以便扫描电子邮件时遇到了类似的问题。 我试过 (&(objectClass=user)(!(distinguishedName:=*Evil*))) 但似乎有些MFP不接受 * 作为通配符,但它们确实接受 %

        3
  •  3
  •   Liam Joshua    8 年前

    afaict,这不能用Active Directory中的LDAP过滤器来完成。许多其他LDAP实现支持可扩展匹配,但AD不支持。

    用户推荐的过滤器包含( ou:dn:=Evil )或上的通配符 distinguishedName 尚未对Active Directory进行测试。

        4
  •  2
  •   Ben Klang    12 年前

    根据 http://www.zytrax.com/books/ldap/apa/component.html ,可以使用LDAP组件筛选器获取所需内容。下面是一个符合您描述的示例:

    (&(objectClass=organizationalUnit)(!(ou:dn:=Evil)))
    

    这匹配所有具有OrganizationUnit的ObjectClass的对象,但拒绝其DN包含符合ou=evil的组件的任何对象。

        5
  •  1
  •   Terry Gardner    14 年前

    对象类 organizationalUnit 及其后代 inetOrgPerson 允许该属性 ou 出现在一个条目中。添加一个 欧点 具有值的属性 evil 从属于的对象 ou=evil 分支并包含断言 (!(ou=evil)) 到搜索筛选器,以将候选列表中的响应限制为不包含属性的响应 欧点 用价值 邪恶的 . 或者, LDAP Assertion Control 可以以相同的方式对请求使用,以确保包含 欧点 用价值 邪恶的 未处理。符合LDAP的专业质量目录服务器将支持这两种方法。