3 回答

TA貢獻1871條經驗 獲得超8個贊
域用戶組是一個全局組安全組,默認情況下包括域中的所有用戶帳戶。當您在域中創建用戶帳戶時,默認情況下會將其添加到該組中。
大多數方法不會揭示“主要”組的成員身份。對于大多數用戶來說,“主要”組是“域用戶”。具體來說,用戶對象的memberOf 屬性和組對象的member 屬性永遠不會顯示“主要”組成員資格。在大多數域中,“Domain Users”組的成員屬性為空,可以安全地假設所有用戶都屬于該組。
域用戶 LDAP 查詢示例 對于將“域用戶”指定為“主要”的所有用戶,搜索 PrimaryGroupID 屬性為 513(默認情況下)的所有用戶?!坝蛴脩簟苯M的 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)([email protected]))

TA貢獻1824條經驗 獲得超8個贊
除了我指定的搜索方法之外,上面給定的代碼片段是正確的。我無法從用戶容器中搜索域用戶組內的用戶,因為我沒有提到在子目錄中搜索。通過添加搜索范圍,
ctls.setSearchScope(SearchControls.SUBTREE_SCOPE);
它能夠成功檢索用戶
添加回答
舉報