【问题标题】:Get active directory groups for a specific user, nested using LDAP获取特定用户的活动目录组,使用 LDAP 嵌套
【发布时间】:2017-11-29 10:20:39
【问题描述】:

我不熟悉这种对 ldap 进行查询的方式。我一直坚持使用 LDAP_MATCHING_RULE_IN_CHAIN ("member:1.2.840.113556.1.4.1941:=....

我已经搜索了信息,我对如何使用它感到困惑。

我有一个 VB sn-p,我试图在其中获取用户所属的所有组,直接或间接。我得到一个空的结果。

我有些事情我不确定,

  1. 我已将根设置为 AD 的根,对吗?
  2. 我是否需要指定 ObjectCategory 和 objectClass 才能获得结果,或者它们是否“只是”用于在返回某些内容后缩小结果集?
  3. 在 LDAP_MATCHING_RULE_IN_CHAIN ("memberOf:1.2.840.113556.1.4.1941:= 我有各种不同的建议来添加对组的引用,但这里的重点是获取组列表,我是否需要指定是否有任何参考组可以使此过滤器起作用?

我正在搜索 AD 中的 CN 用户“AD 用户”,我尝试过其他用户的结果相同(无)

有人看到我在这里做错了吗?

    Private Sub Button2_Click(sender As Object, e As EventArgs) Handles Button2.Click

        Dim adoCommand, adoConnection, strBase, strFilter, strAttributes
        Dim objRootDSE, strDNSDomain, strQuery, adoRecordset, strName, strCN

        ' Setup ADO objects.
        adoCommand = CreateObject("ADODB.Command")
        adoConnection = CreateObject("ADODB.Connection")
        adoConnection.Provider = "ADsDSOObject"
        adoConnection.Open("Active Directory Provider")
        adoCommand.ActiveConnection = adoConnection

        ' Search entire Active Directory domain.
        objRootDSE = GetObject("LDAP://RootDSE")

        strDNSDomain = objRootDSE.Get("defaultNamingContext")
        strBase = "<LDAP://" & strDNSDomain & ">"

        ' Filter on user objects.
        'strFilter = "(&(objectCategory=Person)(objectClass=user)"

        strFilter = "(&(objectCategory=Group)"
        strFilter = strFilter & "(member:1.2.840.113556.1.4.1941:=(CN=AD User,DC=hnitservice,DC=local)))"

        ' Comma delimited list of attribute values to retrieve.
        strAttributes = "sAMAccountName,cn"

        ' Construct the LDAP syntax query.
        strQuery = strBase & ";" & strFilter & ";" & strAttributes & ";subtree"
        adoCommand.CommandText = strQuery
        adoCommand.Properties("Page Size") = 100
        adoCommand.Properties("Timeout") = 30
        adoCommand.Properties("Cache Results") = False

        ' Run the query.
        adoRecordset = adoCommand.Execute

        ' Enumerate the resulting recordset.
        Do Until adoRecordset.EOF
            ' Retrieve values and display.
            strName = adoRecordset.Fields("sAMAccountName").Value
            strCN = adoRecordset.Fields("cn").value
            '    Wscript.Echo "NT Name: " & strName & ", Common Name: " & strCN
            ' Move to the next record in the recordset.
            adoRecordset.MoveNext
        Loop

        ' Clean up.
        adoRecordset.Close
        adoConnection.Close

    End Sub

【问题讨论】:

  • 由于您的标题说:“获取特定用户的活动目录组,使用 LDAP 嵌套”,看来您的查询很好。但是,您的结果将是用户所属的 GROUPS。然后你说:“我正在搜索 AD 中的 CN 用户“AD 用户”,我尝试过其他用户的结果相同“你是在搜索组还是用户?
  • 我正在搜索用户所属的组。 AD User 是我正在为其寻找组的用户的名称。所以我需要输入一个用户名并得到一个组列表。

标签: vb.net ldap ldap-query


【解决方案1】:

All Groups a User is a member of including Nested Groups#

此可扩展匹配规则通常称为 LDAP_MATCHING_RULE_IN_CHAIN

例如,要查找 "CN=UserName,CN=Users,DC=YOURDOMAIN,DC=NET" 所属的所有组,请将 base 设置为组容器 DN;例如 (OU=groupsOU,DC=MyDomain,DC=NET) 和子树的范围,并使用以下过滤器。

(member:1.2.840.113556.1.4.1941:=(CN=UserName,CN=Users,DC=YOURDOMAIN,DC=NET))

将返回用户所属的所有组,包括嵌套组。

很抱歉,我无法为 vb.net 提供帮助,但您可能需要确定您正在关注推荐并且您的 baseDN 是合适的。

这没有帮助:

 ' Filter on user objects.
        'strFilter = "(&(objectCategory=Person)(objectClass=user)"

因为你想返回组。

我始终建议您使用“已知”的良好实用程序执行查询,并确保查询正常工作。 (我喜欢Apache Studio

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多