2011-05-18 66 views
6

如何將Active Directory LDAP查詢過濾到包含已驗證/綁定用戶(或任何用戶)的組?這工作得很好:如何過濾包含特定用戶的組的LDAP查詢?

(&(objectClass=group)(member=*)) 
>>> lots of results 

但我不能去任何更多的細節:

(&(objectClass=group)(member=*S*)) 
>>> nothing 

的MSDN提到使用這樣的過濾器:

(member:1.2.840.113556.1.4.1941:=(cn=user1,cn=users,DC=x)) 

但是,即使忽略了瘋狂超幻數參與,我總是得到0結果,當我嘗試過濾(即使用我自己的distinguishedName替換cn=user1,cn=users,DC=x,甚至重新把它與*)。

+0

在@鏈接的MSDN搜索過濾語法頁JPBlanc的回答下面*列表*瘋狂的超神奇的數字,但它並沒有*解釋*它。 *解釋*是它是由ISO和ITU-T管理的模糊全球[OID](https://en.wikipedia.org/wiki/Object_identifier)標準中的一個節點,其中LDAP是少數幾個突出的用途](https://en.wikipedia.org/wiki/Object_identifier#Usage)。請參閱http://www.oid-info.com/cgi-bin/display?tree=1.2.840.113556.1.4.1941瞭解每個數字意義的結構分解。 – 2017-03-08 01:52:11

回答

6

您需要的用戶即

(&(member=CN=Your Name,OU=Your OU,DC=company,DC=com)(objectClass=group)) 

的完整DN注意不能使用*在這一個

+3

「當我嘗試過濾時,我總是得到0個結果(**甚至用我自己的distinguishedName **替換了cn = user1,cn = users,DC = x'」 – 2011-05-18 21:39:30

3

所以參與遞歸搜索瘋狂的超幻數Search Filter Syntax解釋。

要查找一個搜索(遞歸地)所有的基團「USER1」是其成員:

  • 設置基座到組容器DN;例如根DN(DC = DOM,DC = FR)
  • 設置的範圍,以子樹
  • 使用以下濾波器:(member:1.2.840.113556.1.4.1941:=cn=user1,cn=users,DC=x)

explicited使用LDIFDE.EXE包括在Windows Server它的命令行工具得出:

ldifde -f user1Grps.ldf -d "dc=societe,dc=local" -r "(member:1.2.840.113556.1.4.1941:=cn=user1,ou=Monou,dc=societe,dc=local)" 

如果您正在運行在W2K8或W2K8 R2服務器要小心,以管理員身份運行。

如果在C#編程,你可以使用:

/* Retreiving a principal context 
*/ 
Console.WriteLine("Retreiving a principal context"); 
PrincipalContext domainContext = new PrincipalContext(ContextType.Domain, "WM2008R2ENT:389", "dc=dom,dc=fr", "jpb", "PWD"); 


/* Look for all the groups a user belongs to 
*/ 
UserPrincipal aUser = UserPrincipal.FindByIdentity(domainContext, "user1"); 
PrincipalSearchResult<Principal> a = aUser.GetAuthorizationGroups(); 

foreach (GroupPrincipal gTmp in a) 
{ 
    Console.WriteLine(gTmp.Name);  
} 
相關問題