2011-06-01 88 views
30

是否可以創建一個LDAP查詢來返回(或檢查)嵌套組中的用戶?例如UserA是GroupA的成員,GroupA是GroupB的成員。我想要GroupB上的查詢返回UserA是成員。僅限LDAP。該服務器是Active Directory。ldap嵌套組成員資格

回答

54

是的,使用LDAP_MATCHING_RULE_IN_CHAIN匹配規則(OID 1.2.840.113556.1.4.1941)。例如:

(memberOf:1.2.840.113556.1.4.1941:=cn=group,cn=users,DC=x) 

看到http://msdn.microsoft.com/en-us/library/aa746475%28VS.85%29.aspx

+0

謝謝;雖然它是這種情況下的成員(成員會告訴我用戶是其成員的組) – askvictor 2011-06-07 03:46:25

+5

您能解釋一下對於我們這些不擅長LDAPese的人麼? – 2011-10-25 16:12:24

+1

這個規則是微軟的擴展嗎? – 2012-09-26 10:55:45

2

您必須使用組的完全可分辨名稱在我的情況下,使用memberOf:1.2.840.113556.1.4.1941:=CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com是整個專有名稱

(&(objectCategory=person)(objectClass=user)(memberOf:1.2.840.113556.1.4.1941:=CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com)) 

你可以得到尊敬通過運行以下代碼並放入此過濾器,您的組的名稱 (&(objectClass = group)(name = MyGroup))

Imports System.DirectoryServices 

Module Module1 

Sub Main() 
    Dim run As Boolean = True 
    Dim Filter As String 
    While run 
     Console.WriteLine("Enter Filter:") 
     Filter = Console.ReadLine() 
     If Filter = "exit" Then 
      run = False 
     Else 
      checkFilter(Filter) 
     End If 
    End While 
End Sub 

Function checkFilter(Filter As String) As Boolean 
    Dim search As New DirectorySearcher("LDAP://dc=Domain,dc=com") 
    Try 
     search.Filter = Filter 
     search.PropertiesToLoad.Add("name") 
     search.PropertiesToLoad.Add("distinguishedName") 
     search.SearchScope = SearchScope.Subtree 
     Dim results As SearchResultCollection = search.FindAll() 
     If results Is Nothing Then 
      Console.WriteLine("Nothing") 
      Return False 
     Else 
      If results.Count() = 0 Then 
       Console.WriteLine("non found") 
      End If 
      Dim result As SearchResult 
      For Each result In results 
       Console.WriteLine(result.Properties("name")(0).ToString()) 
       Console.WriteLine(result.Properties("distinguishedName")(0).ToString()) 
       'For Each prop In result.Properties("members") 
       ' Console.WriteLine(prop.ToString()) 
       'Next 
      Next 
      Console.WriteLine(String.Format("{0} Users Found", results.Count())) 
     End If 
    Catch ex As Exception 
     Console.WriteLine(ex.Message) 
    End Try 
    Return True 
End Function 

End Module 
0

至於你的問題,查詢應該是

(&(memberOf:1.2.840.113556.1.4.1941:={0})(objectCategory=person)(objectClass=user)(sAMAccountName={1})) 

{0}是嵌套組,它應該是一個分辨名稱

{1}是用戶sAMAccountName賦你想(您可以在(sAMAccountName={1})之內使用除sAMAccountName之外的任何其他用戶屬性)

然後,如果用戶是嵌套組的成員,您將獲得用戶詳細信息