LDAP 过滤器功能强大,但我不知道如何根据 DN 搜索对象。我已经有很多搜索对象的过滤器,但似乎不支持搜索特定的 DN。
例如我有
&(objectclass=top)(uid=myspecialuser)(aci=*)
Run Code Online (Sandbox Code Playgroud)
这将返回一个 uid 等于 myspecialuser 的对象,该对象具有一个或多个aci属性。
由于我无法完全理解的原因,例如 LDAP 不允许我使用 DN 搜索对象
&(objectclass=top)(dn=cn=myspecialuser,o=special,c=NL)
Run Code Online (Sandbox Code Playgroud)
事实上,如果没有唯一的属性来搜索对象,似乎根本不可能使用过滤器来选择对象。您根本无法搜索 DN。
它是否正确?没有办法根据 DN 过滤搜索吗?
LDAP“搜索”操作有一种特定的方法可以轻松地执行此操作,\xe2\x80\x93 不是通过过滤器,而是通过“基本 DN”参数(通常与“基本”一起作为搜索范围)。
\n例如,而不是典型的“子树”搜索......
\nbase: o=Special,c=NL\nscope: sub\nfilter: (&(uid=myspecialuser)(aci=*))\nRun Code Online (Sandbox Code Playgroud)\n...您可以像这样选择一个特定条目:
\n\n基础: cn=我的特殊用户,o=特殊,c=NL\n范围:基础\n过滤器: (objectClass=*)\n\n
“base”范围可防止搜索返回任何不需要的子条目,因此您只能准确获得所需的 DN。
\n(但是,除了 \xe2\x80\x93 你可以指定任何范围的任何基数之外,它并没有添加任何魔法。)
\n确实,在标准LDAP 中,您无法编写与特定 DN 匹配的过滤器,因此如果您想要检索多个条目,则需要发出多个“基本”搜索查询,每个 DN 一个。(这通常不是问题,因为您可以异步发送一堆请求,然后立即等待所有请求。)
\n但是,某些LDAP 实现确实具有包含条目 DN 的自定义操作属性,可以对其进行匹配。
\n例如,MS Active Directory具有distinguishedName操作属性:
filter: (|(distinguishedName=cn=My special user,o=Special,c=NL)\n (distinguishedName=cn=Other special user,o=Special,c=NL))\nRun Code Online (Sandbox Code Playgroud)\nOpenLDAP 具有标准的 entryDN操作属性。
389 Directory Server似乎有entryDN,但我还没有实际检查是否可以搜索它。
要查看条目的所有操作属性,只需进行常规搜索,但在“所需属性”参数中指定+ 通配符*(而不是通常的)。
附带说明一下,有一个过滤器语法(ExtensibleMatch),它允许与各个 DN 属性进行匹配,就像它们是条目属性一样。
\n例如,(o:dn:=Special)将匹配o=SpecialDN 中任何位置的所有条目,即使它不存在于条目本身中,因此匹配 的所有子项o=Special。
然而,这并没有得到广泛支持;特别是您不能将其与 Active Directory 一起使用(但可以在 OpenLDAP 中使用)。
\n| 归档时间: |
|
| 查看次数: |
12379 次 |
| 最近记录: |