3

假设我有如下结构:

如何排除 A 和 B2?

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

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

4

6 回答 6

6

LDAP 搜索由 4 个元素组成:

  1. 您要求开始搜索的节点(节点的可分辨名称)
  2. 搜索范围(基础、单级、子树)
  3. 您的搜索过滤器(例如(objectClass=user)
  4. 您要检索的属性。

在 Active Directory 中,不存在从递归搜索中排除 OU 的“自然”方式。

关于 LDAP,从理论上讲,ExtensibleMatch存在并启用您想要做的事情,但Active Directory不支持它。

于 2012-03-09T12:46:24.747 回答
1

我正在做类似的事情。我首先使用搜索范围设置为“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 进行比较。如果 OU 的 dn 匹配,我继续下一个结果。如果没有,那么我采取一些行动。

于 2015-03-11T02:52:48.397 回答
1

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

于 2017-08-04T16:02:56.137 回答
0

由于目录服务器不合规(如 JP 所述,AD 不支持可扩展匹配过滤器,因此不合规),如果存在将条目标识为属于的属性AB2,则排除具有搜索过滤器的那些。例如,如果条目从属于A具有objectClass值的条目in-A,则您的过滤器可以排除那些具有由基本对象ou=users, dc=domain, dc=co, dc=uk、范围whole subtree、过滤器(!(objectClass=in-A))和您想要的属性列表组成的搜索的条目。可以构造一个类似的过滤器来同时排除A条目B2

有关搜索和搜索过滤器的更多信息,请参阅LDAP:掌握搜索过滤器

于 2012-03-09T16:48:40.833 回答
0

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

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

于 2013-09-10T15:14:52.807 回答
0

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

于 2014-04-24T13:58:04.560 回答