active directory عضوية مجموعة متداخلة ldap




active-directory nested (3)

نعم ، باستخدام قاعدة المطابقة 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

هل من الممكن إنشاء استعلام LDAP الذي سيعود (أو يتحقق) من المستخدمين في مجموعة متداخلة؟ على سبيل المثال ، UserA هي عضو في GroupA ، و GroupA عضو في GroupB. أريد استعلام على GroupB لإرجاع أن المستخدم هو عضو. LDAP فقط. الخادم هو الدليل النشط.


يجب عليك استخدام الاسم المميز الكامل لمجموعتك عند استخدام memberOf:1.2.840.113556.1.4.1941:= في حالتي CN=MyGroup,OU=User,OU=Groups,OU=Security,DC=domain,DC=com was الاسم المميز الكامل

(&(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

كما سؤالك ، يجب أن يكون الاستعلام

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

{0} هي المجموعة المتداخلة ، يجب أن تكون اسمًا مميزًا

{1} هو المستخدم sAMAccountName الذي تريده (يمكنك استخدام أي خاصية مستخدم أخرى غير sAMAccountName ضمن (sAMAccountName={1}) )

ثم ستحصل على تفاصيل المستخدم للاستجابة إذا كان المستخدم عضوًا في مجموعة متداخلة