许多与AD交互的非LDAP专用应用程序(例如,读取对象或使用AD进行身份验证的应用程序)仅允许指定LDAP搜索过滤器。不过,问题在于,我无法将查询限制在默认域分区级别(至少是AFAIK)以下。
为了解决这个问题,我尝试使用以下搜索过滤器:
(&(objectClass=user)(objectCategory=person)(distinguishedname=*,OU=MyNamedOU,DC=*))
...但是,在它不起作用之后,我开始查找有关如何基于专有名称进行查询的文章,因为它是一种构造属性。
无论如何,有没有办法仅基于搜索过滤器语法将查询限制到特定的OU?
TIA
答案 0 :(得分:3)
Active Directory不允许您搜索distinguishedName
上的部分匹配项。如果查询中有distinguishedName
,则只能是完全匹配。对于任何使用distinguishedName
的属性(例如manager
,member
等),都是如此。
实际上,没有办法仅通过查询字符串将查询限制为特定的OU,因为没有包含OU的可搜索属性。如果只想搜索特定的OU,则将需要:
SearchRoot
(有时称为“搜索库”)设置为该OU而不是整个域来搜索单个OU。如果需要,还可以将SearchScope
设置为SearchScope.OneLevel
,以不搜索子OU。对要包括的每个OU重复搜索。或者,distinguishedName
丢弃不需要的OU中的结果。 (因为此时您已经有了结果,所以distinguishedName
只是一个字符串,您可以使用它进行任何操作,包括部分匹配)第二个选项通常会更快,因为它意味着一次针对AD的搜索,而不是针对多个搜索,但这取决于最终得到多少结果以及要丢弃多少结果。