用于搜索 DN 的 LDAP 过滤器

用于搜索 DN 的 LDAP 过滤器

LDAP 过滤器功能强大,但我不知道如何根据 DN 搜索对象。我已经有许多过滤器可以搜索对象,但似乎不支持搜索特定 DN。

例如我有

&(objectclass=top)(uid=myspecialuser)(aci=*)

这将返回一个具有一个或多个aci属性的 uid 等于 myspecialuser 的对象。

由于我不能完全理解的原因,LDAP 不允许我使用 DN 搜索对象,例如

&(objectclass=top)(dn=cn=myspecialuser,o=special,c=NL)

事实上,如果没有唯一属性来搜索对象,使用过滤器选择对象似乎根本是不可能的。您根本无法搜索 DN。

这是正确的吗?没有办法根据 DN 过滤搜索?

答案1

a) 所有 LDAP 服务器:指定 DN 作为搜索的“基础”

LDAP 的“搜索”操作有一个特定的方法可以轻松完成此操作 - 不是通过过滤器,而是通过“base DN”参数(通常与‘base’一起作为搜索范围)。

例如,不是进行典型的“子树”搜索......

base: o=Special,c=NL
scope: sub
filter: (&(uid=myspecialuser)(aci=*))

...您可以选择这样的特定条目:

基础:cn=我的特殊用户,o=特殊,c=NL
范围:根据
过滤器:(objectClass=*)

“基本”范围可防止搜索返回任何不需要的子条目,因此您只能获得您要求的 DN。

(但是,除此之外它没有添加任何魔力——您可以指定具有任何范围的任何基础。)


b) 某些 LDAP 服务器:可过滤镜像 DN 的操作属性

确实标准LDAP 您无法编写与特定 DN 匹配的过滤器,因此如果您想检索多个条目,则需要发出多个“基本”搜索查询,每个 DN 一个。(这通常不是问题,因为您可以异步发送一堆请求,然后一次等待所有请求。)

然而,一些LDAP 实现确实具有包含条目 DN 的自定义操作属性,它与之匹配。

  • 例如,微软活动目录具有distinguishedName操作属性:

    filter: (|(distinguishedName=cn=My special user,o=Special,c=NL)
              (distinguishedName=cn=Other special user,o=Special,c=NL))
    
  • OpenLDAP 具有标准 entryDN操作属性。

  • 389 目录服务器似乎entryDN,但我还没有真正检查是否可以搜索。

要查看条目的所有操作属性,只需进行常规搜索,但指定+ 通配符在“想要的属性”参数中(而不是通常的*)。


c) 一些 LDAP 服务器:按单个 DN 组件进行过滤

顺便提一下,过滤器语法(可扩展匹配) 允许匹配单个 DN 属性,就像匹配条目属性一样。

例如,(o:dn:=Special)将匹配 DN 中任何位置包含 的所有条目o=Special,即使该条目本身中不存在该条目,因此会匹配 的所有子项o=Special

然而,这是不是得到广泛支持;特别是您不能将它与 Active Directory 一起使用(但可以在 OpenLDAP 中使用)。

相关内容