Active directory LDAP从搜索中排除子OU

Active directory LDAP从搜索中排除子OU,active-directory,ldap,ldap-query,Active Directory,Ldap,Ldap Query,假设我的结构如下所示: 如何排除A和B2 _users |__A |__B |__B1 |__B2 |__B3 |__C |__D ou=用户,dc=域,dc=co,dc=uk LDAP搜索由4个元素组成: 请求从中开始搜索的节点(节点的名称) 搜索范围(基本、一级、子树) 搜索的筛选器(例如,(objectClass=user)) 要检索的属性 在Active Directory中,不存在从递归搜索中排除OU的“自然”方法。关于LDAP,从理论上讲,它允许您做您想做的事情,

假设我的结构如下所示:

如何排除A和B2

_users
|__A
|__B
   |__B1
   |__B2
   |__B3
|__C
|__D

ou=用户,dc=域,dc=co,dc=uk

LDAP搜索由4个元素组成:

  • 请求从中开始搜索的节点(节点的名称)
  • 搜索范围(基本、一级、子树)
  • 搜索的筛选器(例如,(objectClass=user))
  • 要检索的属性

  • 在Active Directory中,不存在从递归搜索中排除OU的“自然”方法。关于LDAP,从理论上讲,它允许您做您想做的事情,但它在Active Directory中。

    因为目录服务器不兼容(正如JP所指出的,AD不支持可扩展的匹配筛选器) 因此不符合),如果存在具有将条目标识为 属于
    A
    B2
    的,排除使用搜索筛选器的。例如,如果输入 从属于
    A
    objectClass
    在-A中具有值
    ,您的筛选器可以排除具有值的对象
    由基本对象
    ou=users,dc=domain,dc=co,dc=uk
    ,scope
    整个子树组成的搜索,
    筛选
    (!(objectClass=in-A))
    ,以及所需的属性列表。可以使用类似的过滤器 构造为同时排除
    A
    B2
    中的条目


    有关搜索和搜索筛选器的详细信息,请参阅

    唯一的方法是仅在想要或不想要的OU上设置特殊属性。您可以为用户使用
    pager
    属性,也可以为计算机使用physicalLocationObject,因为它们很少使用,并且在处理此类问题时通常会被“滥用”(别忘了确认它们是否真的未使用!!)。然后,您可以对这些属性进行搜索筛选,以排除这些属性,例如:
    (&(objectclass=user)(!(pager=*))


    当然,这是低效的,正确的解决方案是重新排列LDAP/AD结构以满足需要。

    我可能过度简化了这一点,但您不能也拒绝对要从查询中排除的OU的列表/读取访问吗?假设您使用特定的服务帐户来执行查找,这应该会起作用。

    我正在做类似的事情。我首先使用搜索范围设置为“OneLevel”的“objectclass=organizationalunit”。代码如下所示:

    DirectoryEntry oDE = new DirectoryEntry("LDAP://DC=ChildDomain,DC=RootDomain")
            using (DirectorySearcher ds = new DirectorySearcher(oDE))
            {
                ds.PropertiesToLoad.Add("dn");
                ds.SearchScope = SearchScope.OneLevel;
                ds.Filter = "(objectClass=OrganizationalUnit)";
                ds.PageSize = 30;
    

    然后我使用foreach循环遍历结果,并将每个结果的可分辨名称与我排除的结果的可分辨名称进行比较。如果OU的dn匹配,我将继续下一个结果。如果没有,那么我会采取一些措施。

    对于我来说,我需要轻松地从ldap搜索结果中排除禁用的用户,或者从任何其他可以显示这些用户帐户以及已启用(活动)帐户的内容中排除禁用的用户。我拒绝了禁用用户OU的列表内容访问,使OU可见,但内容不可见。其结果是,人们在使用Contacts应用程序的绑定Mac客户端上搜索时,将不再看到“ghost”用户。

    做了类似于什么的事情?一般来说,答案应该是独立的,引用并链接到他们使用的任何其他答案或外部资源。对于我来说,使用Ad排除DiscriminatedName路径是有效的: