如果我找的所有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
我要寻找一个LDAP filter
,返回ABDE(不含C) -主要逻辑将得到我,确实有最后各组OU=Groups
或OU=Common Groups
我现在的搜索是使用:
Search base: CN=Users,DC=citrite,DC=net
Filter: (objectCategory=Group)
首先,在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命令行工具的现代语法。 如果用户正在使用的ldapsearch的遗产OpenLDAP的版本,参数的命令行工具有所不同,但这并不重要。 重要的是过滤器。
文章来源: How can I make a LDAP query that returns only groups having OU=Groups from all levels?