如果我正在寻找所有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
我正在寻找一个返回A B D E(没有C)的LDAP filter
- 主要是逻辑会让我拥有最后OU=Groups
或OU=Common Groups
我目前的搜索正在使用:
Search base: CN=Users,DC=citrite,DC=net
Filter: (objectCategory=Group)
答案 0 :(得分: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,命令行工具的参数是 有点不同,但这没关系。重要的是过滤器。