LDAP从搜索中排除子OU

时间:2012-03-09 10:22:07

标签: active-directory ldap ldap-query

说如果我有如下结构:

如何排除A和B2?

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

ou = users,dc = domain,dc = co,dc = uk;

6 个答案:

答案 0 :(得分:6)

LDAP搜索由4个元素组成:

  1. 您要求开始搜索的节点(点头的区分名称)
  2. 搜索范围(基数,单级,子树)
  3. 搜索过滤器(例如(objectClass = user))
  4. 您要检索的属性。
  5. 在Active-Directory中,它不存在从递归搜索中排除OU的“自然”方式。关于LDAP,从理论的角度来看,它存在ExtensibleMatch,它允许您想要做什么,但它在Active-Directory中是not supported

答案 1 :(得分:1)

我做了类似的事情。我首先使用搜索' objectclass = organizationalunit'搜索范围设置为' OneLevel'。代码看起来像这样:

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 I< m排除。如果OU的dn匹配,我继续下一个结果。如果没有,那我就采取一些行动。

答案 2 :(得分:1)

对我来说,我需要轻松地将禁用的用户排除在ldap搜索结果或其他任何可以在启用了侧(启用)的帐户中显示这些用户帐户的用户。我拒绝禁用用户OU的列表内容访问,这使得OU可见,但内容不可见。结果是人们使用“联系人”应用程序搜索绑定的Mac客户端将不再会看到“幽灵”用户。

答案 3 :(得分:0)

由于目录服务器不兼容(如JP所述,AD不支持可扩展匹配过滤器 并且因此是不合规的),如果存在具有标识条目的值的属性 属于AB2的用户,请使用搜索过滤器排除这些内容。例如,如果条目 从属于A的{​​{1}}代价为objectClass,您的过滤器可以排除那些 包含基础对象in-A,范围ou=users, dc=domain, dc=co, dc=uk的搜索, 过滤whole subtree,以及您想要的属性列表。类似的过滤器可能是 构造为同时排除(!(objectClass=in-A))A的条目。

有关搜索和搜索过滤器的详情,请参阅LDAP: Mastering Search Filters

答案 4 :(得分:0)

唯一的方法是仅在想要的不想要的 OU上设置特殊属性。您可以将pager属性用于用户,或将physicalLocationObject用于计算机,因为它们很少使用,并且通常可以“滥用”来管理此类问题(不要忘记确认它们确实是不用或不用!!)。然后,您可以对这些属性进行搜索过滤以排除这些OU,例如:(&(objectclass=user)(!(pager=*)))

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

答案 5 :(得分:0)

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