LDAP:如何从Active Directory获取所有用户和组

时间:2010-10-19 07:39:43

标签: php active-directory ldap

我正在尝试使用 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, 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=*)。

2 个答案:

答案 0 :(得分:1)

这是错误的语言,但这篇知识库文章专门讨论了使用primarygroupID属性查找主要组的SID:

How to use the PrimaryGroupID attribute to find the primary group for a user

您可以将其作为自己代码的起点。

答案 1 :(得分:0)

关于如何设置用户主要组的这个(vbscript)示例可能会给你一些结论:

oGroup.GetInfoEx Array("primaryGroupToken"), 0
oUser.PrimaryGroupID = oGroup.PrimaryGroupToken
oUser.SetInfo

如您所见,您必须将用户的PrimaryGroupID属性与该组的PrimaryGroupToken属性(&(objectclass = group)(PrimaryGroupToken = UsersPrimaryGroupID ))或类似属性相匹配。