说如果我有如下结构:
如何排除A和B2?
_users
|__A
|__B
|__B1
|__B2
|__B3
|__C
|__D
ou = users,dc = domain,dc = co,dc = uk;
答案 0 :(得分:6)
LDAP搜索由4个元素组成:
在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不支持可扩展匹配过滤器
并且因此是不合规的),如果存在具有标识条目的值的属性
属于A
和B2
的用户,请使用搜索过滤器排除这些内容。例如,如果条目
从属于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的列表/读取权限?假设您使用特定的服务帐户来执行查找,这应该有效。