此LDAP查询成功枚举组内的所有用户:
memberOf=CN=MySubGroup1,OU=MyGroup1,OU=Global Groups,DC=mycompany,DC=com
MyGroup1组有两个子组:MySubGroup1,MySubGroup2。 为了获得MyGroup1的所有用户,我可以进行查询以获取MySubGroup1的用户,另一个查询来获取MySubGroup1的用户,然后进行联合。
但是,我问我如何只用一个LDAP查询就可以获得相同的结果, 询问MyGroup1和子组中的所有用户。
有什么想法吗?
答案 0 :(得分:3)
没有subgroup
,只有群组。正确的术语是subordinate
,
即,cn=mysubgroup1
从属于ou=mygroup1
,依此类推。
在LDAP搜索请求中使用以下参数:
OU=MyGroup1,OU=Global Groups,DC=mycompany,DC=com
sub
如果ou=mygroup1
下方有多个“级别”,则one
(|(cn=mysubgroup1)(cn=mysubgroup2))
这些搜索请求参数应该产生具有两个条目的搜索结果,即区分 每个条目的值,以及其值是每个组成员的可分辨名称的属性。
答案 1 :(得分:2)
如果您的服务器是Microsoft Active Directory,则可以使用some extended rules。其中一条规则基本上可以满足您的需求。请看this answer。
试试这个:
memberof:1.2.840.113556.1.4.1941:=CN=Some Group,OU=My Organization Unit,DC=company,DC=com
引用该答案:
[...]使用Microsoft AD LDAP时,可以使用LDAP_MATCHING_RULE_IN_CHAIN匹配规则使用嵌套组进行授权。这比在客户端上搜索子组要快得多,因为它是在DC服务器上完成的,对网络的查询较少。
1.2.840.113556.1.4.1941 LDAP_MATCHING_RULE_IN_CHAIN此规则仅限于适用于DN的过滤器。这是一个特殊的“扩展匹配运算符,它将对象中的祖先链一直走到根,直到找到匹配为止。