LDAP 过滤器很强大,但我不知道如何根据 DN 搜索对象。我已经有很多过滤器可以搜索对象,但似乎不支持搜索 DN。
所以例如我有
&(objectclass=top)(uid=myspecialuser)(aci=*)
这将返回一个具有一个或多个aci
属性的 uid 等于 myspecialuser 的对象。
出于我无法完全理解的原因,LDAP 确实允许使用 DN 搜索对象,例如
&(objectclass=top)(dn=cn=myspecialuser,o=special,c=NL)
事实上,如果没有唯一的属性来搜索它,似乎根本不可能使用过滤器来选择对象。Youi根本无法搜索DN。
这个对吗?没有基于 DN 选择的过滤器?
a) 所有 LDAP 服务器:将 DN 指定为搜索的“base”
LDAP 'search' 操作有一个特定的方法可以轻松地做到这一点——不是通过过滤器,而是通过“base DN”参数(通常与“base”一起作为搜索范围)。
例如,而不是典型的“子树”搜索......
...您将选择这样的特定条目:
“基本”范围可防止搜索返回任何不需要的子条目,因此您只能获得您所要求的 DN。
(但是,除此之外,它并没有增加任何魔力——您可以指定任何范围的任何基数。)
b) 一些 LDAP 服务器:镜像 DN 的可过滤操作属性
确实,在标准LDAP 中,您不能编写匹配特定 DN 的过滤器,因此如果您想检索多个条目,则需要发出多个“基本”搜索查询,每个 DN 一个。(这通常不是问题,因为您可以异步发送一堆请求,然后一次等待所有请求。)
但是,某些LDAP 实现确实具有包含条目 DN 的自定义操作属性,可以与之匹配。
例如,MS Active Directory具有
distinguishedName
操作属性:OpenLDAP 具有标准
entryDN
操作属性。389 目录服务器似乎有,
entryDN
但我实际上并没有检查它是否可以被搜索。要查看条目的所有操作属性,只需进行常规搜索,但在“wanted attributes”参数中指定
+
通配符*
(而不是通常的)。c) 一些 LDAP 服务器:过滤单个 DN 组件
附带说明一下,有一个过滤器语法(一个ExtensibleMatch)允许匹配单个 DN 属性,就像它们是条目属性一样。
例如,
(o:dn:=Special)
将匹配在其 DN 中具有o=Special
任何位置的所有条目,即使它不存在于条目本身中,因此匹配o=Special
.但是,这并未得到广泛支持;特别是您不能将它与 Active Directory 一起使用(但您可以在 OpenLDAP 中使用)。