LDAP搜索过滤器语法(仅),用于标识特定OU(AD)中的对象

时间:2019-10-10 15:13:18

标签: .net active-directory ldap ldap-query adsi

许多与AD交互的非LDAP专用应用程序(例如,读取对象或使用AD进行身份验证的应用程序)仅允许指定LDAP搜索过滤器。不过,问题在于,我无法将查询限制在默认域分区级别(至少是AFAIK)以下。

为了解决这个问题,我尝试使用以下搜索过滤器:

(&(objectClass=user)(objectCategory=person)(distinguishedname=*,OU=MyNamedOU,DC=*))

...但是,在它不起作用之后,我开始查找有关如何基于专有名称进行查询的文章,因为它是一种构造属性。

无论如何,有没有办法仅基于搜索过滤器语法将查询限制到特定的OU?

TIA

1 个答案:

答案 0 :(得分:3)

Active Directory不允许您搜索distinguishedName上的部分匹配项。如果查询中有distinguishedName,则只能是完全匹配。对于任何使用distinguishedName的属性(例如managermember等),都是如此。

实际上,没有办法仅通过查询字符串将查询限制为特定的OU,因为没有包含OU的可搜索属性。如果只想搜索特定的OU,则将需要:

  1. 通过将SearchRoot(有时称为“搜索库”)设置为该OU而不是整个域来搜索单个OU。如果需要,还可以将SearchScope设置为SearchScope.OneLevel,以不搜索子OU。对要包括的每个OU重复搜索。或者,
  2. 用所需的结果搜索最顶层的OU,循环搜索结果,并通过查看distinguishedName丢弃不需要的OU中的结果。 (因为此时您已经有了结果,所以distinguishedName只是一个字符串,您可以使用它进行任何操作,包括部分匹配)

第二个选项通常会更快,因为它意味着一次针对AD的搜索,而不是针对多个搜索,但这取决于最终得到多少结果以及要丢弃多少结果。