LDAP:如何从 Active Directory 中获取所有用户和组
Posted
技术标签:
【中文标题】LDAP:如何从 Active Directory 中获取所有用户和组【英文标题】:LDAP: How to get all users and groups from Active Directory 【发布时间】:2010-10-19 07:39:43 【问题描述】:我正在尝试使用 LDAP 查询从 Active Directory 服务器获取所有用户及其关联组。显然,Active Directory 没有给我主要的用户组。比如这个搜索:
(objectclass=user)
产生这个结果:
# Test User, Users, sub.domain.net
dn: CN=Test User,CN=Users,DC=sub,DC=domain,DC=net
....
memberOf: CN=Domain Admins,CN=Users,DC=sub,DC=domain,DC=net
memberOf: CN=Administrators,CN=Builtin,DC=sub,DC=domain,DC=net
....
primaryGroupID: 515
....
这个用户的主要组是 Test Group(我知道这一点是因为我创建了这个用户/组对)所以让我们来看看那个:
# Test Group, Users, sub.domain.net
dn: CN=Test Group,CN=Users,DC=sub,DC=domain,DC=net
objectClass: top
objectClass: group
cn: Test Group
distinguishedName: CN=Test Group,CN=Users,DC=sub,DC=domain,DC=net
instanceType: 4
whenCreated: 20101014151945.0Z
whenChanged: 20101015141656.0Z
uSNCreated: 41007
uSNChanged: 41133
name: Test Group
objectGUID:: aQH58S0MWU2Fu/Cli72u0A==
objectSid:: AQUAAAAAAAUVAAAAIzgCYuz3AhjZk27UXgQAAA==
sAMAccountName: Test Group
sAMAccountType: 268435456
groupType: -2147483646
objectCategory: CN=Group,CN=Schema,CN=Configuration,DC=sub,DC=domain,DC=net
dSCorePropagationData: 16010101000000.0Z
我应该如何将用户与其主要组相关联?当我列出用户的属性时,我得到的只是 primaryGroupID
属性,但在整个 LDAP 数据库 (objectclass=*
) 中找不到它的值。
【问题讨论】:
您如何访问/阅读 Active Directory?您使用的是什么编程或脚本语言?很多这些东西都非常特定于您的开发环境..... @marc_s 我正在使用 php,上面给出的示例来自 ldapsearch 的输出 @Tom:好的,谢谢 - 我不是 PHP 专家,我手头的所有代码都是 .NET (C#) - 所以我恐怕帮不上什么忙你在这里... @marc_s 这真的重要吗?我需要 LDAP 查询方面的帮助。 @Tom:是的,我相信它确实如此——这不是一个简单的 LDAP 查询....在此处查看此解决方案:dunnry.com/blog/… 【参考方案1】:这是错误的语言,但是这篇知识库文章专门讨论了使用 primarygroupID 属性来查找主要组的 SID:
How to use the PrimaryGroupID attribute to find the primary group for a user
您可以在自己的代码中使用它作为起点。
【讨论】:
我在 ruby 中找到了类似的代码:boost.co.nz/blog/ruby-on-rails/…【参考方案2】:这个关于如何设置用户主要组的(vbscript)示例可能会给你一些结论:
oGroup.GetInfoEx Array("primaryGroupToken"), 0
oUser.PrimaryGroupID = oGroup.PrimaryGroupToken
oUser.SetInfo
如您所见,您必须将用户的 PrimaryGroupID 属性与组的 PrimaryGroupToken 属性匹配 (&(objectclass=group)(PrimaryGroupToken=UsersPrimaryGroupID)) 或类似的。
【讨论】:
不幸的是,PrimaryGroupToken 是一个构造属性 - 由 ADSI 提供程序计算,不能通过 LDAP 检索。 感谢您尝试@Silvan,但@Damien_The_Unbeliever 是对的。该字段是由一些废话 MS 库在客户端计算的。以上是关于LDAP:如何从 Active Directory 中获取所有用户和组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 php 中使用 LDAP 从 Active Directory 搜索和更新用户数据?
C# - 使用 LDAP 检索 Active Directory 的组成员
python 使用Python将用户从Active Directory / LDAP导出到CSV文件
如何使用远程 LDAP 客户端确定 Active Directory 服务器的*版本*?
如何配置 Spring Security 身份验证来处理复杂的 Active Directory / LDAP 帐户树?