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

88

我该如何使用搜索过滤器来显示特定组别的用户?

我尝试了以下方法:

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

而且这个:

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

但是它们都无法显示特定用户组的用户。

4个回答

134

在AD中,memberOf被存储为一个区别名称列表。你的筛选器需要像这样:

(&(objectCategory=user)(memberOf=cn=MyCustomGroup,ou=ouOfGroup,dc=subdomain,dc=domain,dc=com))
如果您尚未拥有该可辨认名称,您可以使用以下方式进行搜索:
(&(objectCategory=group)(cn=myCustomGroup))

并返回属性 distinguishedName,大小写可能有所不同。


6
通常在Active Directory中,您会有许多包含组织结构的组织单位。默认的根OU用于组是“Groups”。cn=MyCustomGroup,ou=Groups,dc=subdomain,dc=domain,dc=com 很可能适用于您。如果不行,我建议您执行LDAP搜索以查找您的组(& (objectCategory=group)(cn=MyCustomGroup)),并在结果集中包含distinguishedName属性。这将告诉您在其他查询中要使用的确切字符串。 - Kodra
1
我按照你说的做了,但是使用以下内容没有得到任何结果:(&(objectCategory=user)(memberOf=cn=SingleSignOn,ou=Groups,dc=tis,dc=eg,dc=ddd,DC=com))。 - Madam Zu Zu
1
你尝试过搜索你的组,以确保你有正确的DN吗?我的筛选器应该是(&(objectCategory=group)(cn=SingleSignOn)),属性应该是“distinguishedName”。确保你从域的根目录进行搜索,而不是用户OU(如果你的筛选器仅针对用户,则可能会这样做)。你可以从该查询中获取distinguishedName,并将其直接插入到你的用户查询中。 - Kodra
呃,我想它是大小写敏感的...现在似乎可以工作了!!!:))谢谢!!!!!! - Madam Zu Zu
我认为大小写不是问题,而是空格。 - Timothy Gonzalez
@Kodra 这是在终端中ldapsearch命令中-b参数的值吗?您能否看一下这个:ldapsearch -x -D "cn=Camilo Q Barrero P789677,OU=Users,OU=Technology,OU=Head Office,OU=Accounts,OU=Production,DC=aur,DC=national,DC=com,DC=au" -w Teri3torz -H ldap://ldapaur.aur.national.com.au -b OU=Applications,OU=NAB,OU=Groups,OU=Production,DC=aur,DC=national,DC=com,DC=au "(&(objectClass=user)(memberOf=CN=NAB-Application-ContactCentre-NAB-PAC-Agent,OU=Applications,OU=NAB,OU=Groups,OU=Production,DC=aur,DC=national,DC=com,DC=au))" - Camilo

12
对于Active Directory用户,另一种实现此操作的方法是——假设您所有的组都存储在OU=Groups,DC=CorpDir,DC=QA,DC=CorpName中——使用查询(&(objectCategory=group)(CN=GroupCN))。这将适用于所有小于1500个成员的组。如果您想列出大型AD组的所有成员,同样的查询也可以使用,但您将需要使用分段检索来获取所有成员,每次获取1500个记录。
执行分段检索的关键是在属性中使用以下语法指定范围:attribute;range=low-high。因此,要获取具有3000个成员的AD组的所有成员,请首先运行上述查询,并要求返回member;range=0-1499属性,然后是member;range=1500-2999属性。

1
不要忘记指定 (CN=GroupCN)。我尝试请求所有组,但在指定此项之前它无法正常工作。另外,在指定范围时,您可以使用星号:member;range=1500-* - 它也能很好地工作。 - Stalinko
嗨@Stalinko,如果一个组没有CN怎么办?我有一些只有OU和DC属性的组。 - alucor-it
任何有效的LDAP查询都应该可以在Active Directory中使用--这里有一个示例列表:https://ldapwiki.com/wiki/Active%20Directory%20Group%20Related%20Searches。另一方面,一个组没有CN有点不寻常,那么在你的情况下,哪个属性是该组的“基本名称”? - sigint

5

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)))


2
有没有一种简化这个查询的方法,如果我只想要在同一子路径中的所有组CN的所有成员?例如,类似于 memberOf=CN=*,OU=mygroups,OU=groups,DC=subdomain,DC=domain,DC=com - lampShadesDrifter

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接