3 回答
TA贡献1871条经验 获得超8个赞
域用户组是一个全局组安全组,默认情况下包括域中的所有用户帐户。当您在域中创建用户帐户时,默认情况下会将其添加到该组中。
大多数方法不会揭示“主要”组的成员身份。对于大多数用户来说,“主要”组是“域用户”。具体来说,用户对象的memberOf 属性和组对象的member 属性永远不会显示“主要”组成员资格。在大多数域中,“Domain Users”组的成员属性为空,可以安全地假设所有用户都属于该组。
域用户 LDAP 查询示例 对于将“域用户”指定为“主要”的所有用户,搜索 PrimaryGroupID 属性为 513(默认情况下)的所有用户。“域用户”组的 PrimaryGroupID 属性是相同的整数 513。LDAP 语法 LDAP SearchFilter 可以是:
(primaryGroupID=513)
假设您没有更改默认值,也没有创建任何primaryGroupID 不是 513 的用户。
对于“域用户”组中的用户,只需使用 (primaryGroupID=513) 和用户所在的基本DN(默认情况下 CN=Users),这将返回用户的 DN。
然后,要获取这些用户属于 membeOf 的所有组,您需要在另一个查询中使用 DN 来循环结果,类似于:
(member:1.2.840.113556.1.4.1941:=(CN=UserName,CN=Users,DC=YOURDOMAIN,DC=NET))
如图所示,用户所属的所有组,包括嵌套组
哦,通常情况下,CN=Users 中的用户通常也与伪组“域用户”中的成员相同。
TA贡献1840条经验 获得超5个赞
假设底座usersContainer
设置正确,您只需按如下方式更改过滤器:
搜索用户条目时,您需要修复
objectCategory
以过滤用户 - 而不是组。您还可以使用类似的等效项objectClass=inetOrgPerson
。除非您正在搜索的用户条目实际上确实具有该属性(作为用户的常用名
cn=Domain Users
不太可能),否则您不需要这部分。
所以以下内容应该足够了:
ctx.search(usersContainer, "(&(objectCategory=person)(sAMAccountName=username))", ctls);
要匹配特定的用户组成员身份,您只需在memberOf
属性上添加过滤器(仅当用户是给定组的成员时才返回匹配的用户条目),例如。:
(&(objectCategory=person)(sAMAccountName=username)(memberOf=<groupDN>))
请注意,@jwilleke 指出,如果您的目标是不维护成员资格属性的特殊组 (group:member/user:memberOf),则需要使用primaryGroupID
而不是memberOf
.
也就是说,由于sAMAccountName
在域内的所有安全主体对象中是唯一的,因此您可能只需要使用以下内容而不是添加过滤器UserPrincipalName
:
(&(objectCategory=person)(UserPrincipalName=username@domain.com))
TA贡献1824条经验 获得超8个赞
除了我指定的搜索方法之外,上面给定的代码片段是正确的。我无法从用户容器中搜索域用户组内的用户,因为我没有提到在子目录中搜索。通过添加搜索范围,
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
它能够成功检索用户
添加回答
举报