LDAP 嵌套组成员关系

62

是否可以创建一个LDAP查询,以返回(或检查)嵌套组中的用户?例如,UserA是GroupA的成员,而GroupA是GroupB的成员。我想在GroupB上查询以返回UserA是其成员。仅限使用LDAP。服务器为Active Directory。


3个回答

109

15
你能否为那些不太懂LDAP术语的人解释一下? - docwhat
3
这个规则是微软的扩展吗? - Gearoid Murphy
5
如果可能的话,我会为你烤一个蛋糕,并把它邮寄给你作为感谢。 - Shawn D.
3
这个问题似乎在寻找一个可以接受群组参数并列出所有成员(包括嵌套组中的成员)的解决方案。所有这些解决方案似乎都需要一个用户参数,或者同时需要一个用户和群组参数。 - Martin
2
@kroimon,具体来说,直到Samba 4.4才能正常工作,这个版本修复了破损的实现 - George Hilliard
显示剩余5条评论

13

在使用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

5

根据您的问题,查询应该是这样的:

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

{0} 是嵌套组,它应该是一个可区分名称

{1} 是你想要的用户sAMAccountName(你也可以使用除sAMAccountName之外的任何其他用户属性在(sAMAccountName={1})内)

如果用户是嵌套组的成员,则会获取用户详细信息以响应


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接