在搜索过滤器中使用 DN

问题描述 投票:0回答:3

在我的 LDAP 客户端程序中,有时我必须在搜索过滤器中包含 DN 值。但这个 DN 经常变化,每次我都必须在我的代码中更改这个过滤器。

当我用谷歌搜索时,我得到了这样的东西

假设您想要从 R&D 和 HR 中提取所有 ObjectType = Person 的用户,但不从 Marketing 和 PM 中提取任何用户。过滤器将是:

(&(objectClass=person)(|(ou:dn:=ResearchAndDevelopment)(ou:dn:=HumanResources)))

谁能更详细地解释一下吗?

ldap ldap-query
3个回答
20
投票

您应该检查RFC 2254(LDAP 搜索过滤器的字符串表示形式)。

LDAP 过滤器对布尔运算符使用 polish notation。所以运算符写在操作数之前:

(&(condition1)(condition2)(condition3)...)

上面的示例意味着您需要满足 条件 1 AND 条件 2 AND 条件 3 等等的所有 LDAP 条目。

然后是条件本身。它们非常简单,只能包含几种类型:

  • 现状 -
    (attrName=*)
  • 简单条件 -
    (attrName>=value)
    /
    (attrName<=value)
    /
    (attrName=value)
    /
    (attrName~=value)
  • 子串条件 -
    (attrName=*value*)
    /
    (attrName=*value)
    /
    (attrName=value*)
  • 可扩展条件 -
    (attrName:dn:=value)
    /
    (attrName:matchingRule:=value)

带有 :dn: 关键字的

可扩展条件
意味着您还希望考虑条目 DN 中的属性。因此,对于您的案例条目
cn=John Doe,ou=HumanResources,ou=Users,dc=example,dc=com
将与过滤器
(ou:dn:=HumanResource)
匹配。


将示例过滤器翻译成英文句子将是:

为我查找所有

objectClass
等于
person
且在其“ou”属性或 DN 上某处具有
ResearchAndDevelopment
HumanResources
的 LDAP 条目。


1
投票

您可以使用 dn 作为基础并将搜索范围设置为

base

即将dn值设置为base,并将搜索范围设置为

base
(搜索范围为base、sub和1之一)。


0
投票

如果您确实需要按整个 DN 搜索,您可以使用以下方式搜索:

(distinguishedName=CN=MyCommonName,OU=SomeEnv,...,DC=SomeDir)
© www.soinside.com 2019 - 2024. All rights reserved.