2

如果我正在寻找 all Groups,我会得到太多垃圾。

如果我试图缩小基数,我得到的太少了。

这是一个例子:

CN=A Team,OU=Groups,OU=Americas,DC=example,DC=com
CN=B TEAM,OU=Groups,OU=EMEA,DC=example,DC=com
CN=C Team,OU=Legacy Groups,DC=example,DC=com
CN=D Team,OU=Groups,OU=Bangalore,OU=APAC,DC=example,DC=com
CN=E Team,OU=Common Groups,DC=example,DC=com

我正在寻找一个filter返回 ABDE(没有 C)的 LDAP - 主要逻辑是让我得到所有最后一个OU=GroupsOU=Common Groups

我目前的搜索正在使用:

 Search base: CN=Users,DC=citrite,DC=net
 Filter: (objectCategory=Group)
4

1 回答 1

5

首先,在 Microsoft Active Directory 上不可能在单个搜索中执行此操作,这是因为 AD 不完全兼容 LDAP。

符合 LDAP 的服务器支持extensible-match提供必要过滤的过滤器。来自RFC4511

如果 dnAttributes 字段设置为 TRUE,则匹配附加地应用于条目的可分辨名称中的所有 AttributeValueAssertions,并且如果可分辨名称中至少有一个属性或子类型过滤器项评估为 TRUE,则它评估为 TRUE . dnAttributes 字段的存在是为了减轻对通用匹配规则(例如单词匹配)的多个版本的需求,其中一个适用于条目,另一个适用于条目和 DN 属性。

请注意,可扩展匹配过滤器技术仅适用于符合 LDAP 的服务器,而 AD 不是其中之一。

例如,我将以下条目添加到服务器:

dn: ou=legacy groups,o=training
objectClass: top
objectClass: organizationalUnit
ou: legacy groups

dn: ou=common groups,o=training
objectClass: top
objectClass: organizationalUnit
ou: common groups

dn: ou=groups,o=training
objectClass: top
objectClass: organizationalUnit
ou: groups

dn: cn=a,ou=common groups,o=training
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=user.0,ou=people,o=training
cn: a

dn: cn=b,ou=groups,o=training
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=user.0,ou=people,o=training
cn: b

dn: cn=c,ou=legacy groups,o=training
objectClass: top
objectClass: groupOfUniqueNames
uniqueMember: uid=user.0,ou=people,o=training
cn: c

添加上述条目后,在以下搜索中检查过滤器:

ldapsearch --propertiesFilePath ds-setup/11389/ldap-connection.properties \
    --baseDN o=training \
    --searchScope sub '(|(ou:dn:=groups)(ou:dn:=common groups))' 1.1

dn: ou=common groups,o=training

dn: cn=a,ou=common groups,o=training

dn: ou=groups,o=training

dn: cn=b,ou=groups,o=training

请注意,ou=common groups返回ou=groups, 及其下属,但不返回 ou=legacy groups和下属。

此示例使用 ldapsearch 命令行工具的现代语法。如果用户使用的是旧的 OpenLDAP 版本的 ldapsearch,命令行工具的参数会有些不同,但这并不重要。重要的是过滤器。

于 2012-04-06T09:54:07.453 回答