查询以列出特定组的所有用户

时间:2012-03-27 13:01:18

标签: active-directory ldap ldap-query

如何使用搜索过滤器显示特定群组的用户?

我尝试了以下内容:

(&
    (objectCategory=user)
    (memberOf=MyCustomGroup)
)

和此:

(&
    (objectCategory=user)
    (memberOf=cn=SingleSignOn,ou=Groups,dc=tis,dc=eg,dc=ddd,D‌​C=com)
)   

但不会显示特定群组的用户。

4 个答案:

答案 0 :(得分:73)

memberOf(在AD中)存储为distinguishedNames列表。您的过滤器必须类似于:

(&(objectCategory=user)(memberOf=cn=MyCustomGroup,ou=ouOfGroup,dc=subdomain,dc=domain,dc=com))

如果您还没有专有名称,可以使用以下方法搜索:

(&(objectCategory=group)(cn=myCustomGroup))

并返回属性distinguishedName。案件可能很重要。

答案 1 :(得分:10)

对于Active Directory用户,另一种方法是 - 假设您的所有群组都存储在OU=Groups,DC=CorpDir,DC=QA,DC=CorpName中 - 使用查询(&(objectCategory=group)(CN=GroupCN))。这适用于所有成员少于1500人的团体。如果要列出大型AD组的所有成员,则同一查询将起作用,但您必须使用ranged retrieval一次获取所有成员,1500条记录。

执行范围检索的关键是使用以下语法指定属性中的范围: attribute; range = low-high 。因此,要获取具有3000个成员的AD组的所有成员,请首先运行上述查询,要求返回member;range=0-1499属性,然后返回member;range=1500-2999属性。

答案 2 :(得分:0)

如果DC为Win2k3 SP2或更高版本,则可以使用类似的命令:

(&(objectCategory=user)(memberOf:1.2.840.113556.1.4.1941:=CN=GroupOne,OU=Security Groups,OU=Groups,DC=example,DC=com))

获取嵌套的组成员身份。

来源:https://ldapwiki.com/wiki/Active%20Directory%20Group%20Related%20Searches

答案 3 :(得分:0)

如果您需要在多个组中进行搜索,那么更复杂的查询:

(&(objectCategory=user)(|(memberOf=CN=GroupOne,OU=Security Groups,OU=Groups,DC=example,DC=com)(memberOf=CN=GroupTwo,OU=Security Groups,OU=Groups,DC=example,DC=com)(memberOf=CN=GroupThree,OU=Security Groups,OU=Groups,DC=example,DC=com)))

相同的递归示例:

(&(objectCategory=user)(|(memberOf:1.2.840.113556.1.4.1941:=CN=GroupOne,OU=Security Groups,OU=Groups,DC=example,DC=com)(memberOf:1.2.840.113556.1.4.1941:=CN=GroupTwo,OU=Security Groups,OU=Groups,DC=example,DC=com)(memberOf:1.2.840.113556.1.4.1941:=CN=GroupThree,OU=Security Groups,OU=Groups,DC=example,DC=com)))