我怎样才能让一个LDAP查询,返回只从各个层面为OU =组组?(How can I make a L

2019-07-28 20:16发布

如果我找的所有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=GroupsOU=Common Groups

我现在的搜索是使用:

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

Answer 1:

首先,在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 groupsou=groups ,并返回自己的下属,而不是ou=legacy groups和下属。

本例使用ldapsearch命令行工具的现代语法。 如果用户正在使用的ldapsearch的遗产OpenLDAP的版本,参数的命令行工具有所不同,但这并不重要。 重要的是过滤器。



文章来源: How can I make a LDAP query that returns only groups having OU=Groups from all levels?