什么被认为是遍历LDAP DIT的正确方法?

时间:2014-03-02 20:50:25

标签: java ldap ldap-query

我是LDAP协议和服务器的新手,所以如果我提出另一个琐碎的问题,请原谅我。假设我有以下带有嵌套组的LDAP DIT。

dn: dc=example,dc=com
objectClass: top
objectClass: domain
dc: example

# Create a place where users are stored
dn: ou=Users, dc=example, dc=com
ou: Users
description: All strongbox users.
objectclass: organizationalUnit

# Create users
dn: uid=tcruise,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: tcruise
cn: Tom Cruise
mail: tcruise@example.com
givenName: Tom
surname: Cruise
userPassword: password

dn: uid=sspielberg,ou=Users,dc=example,dc=com
objectClass: inetOrgPerson
objectClass: organizationalPerson
objectClass: person
objectClass: top
uid: sspielberg
cn: Steven Spielberg
mail: sspielberg@example.com
givenName: Steven
surname: Spielberg
userPassword: password

# Create groups
dn: ou=Groups, dc=example, dc=com
ou: Groups
description: Base group organization unit.
objectClass: organizationalUnit

# Employees
dn: ou=Employees, ou=Groups, dc=example, dc=com
ou: Employees
cn: Employees
description: All employees
objectClass: groupOfUniqueNames
uniqueMember: cn=NULL

# Employees (Actors)
dn: ou=Actors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Actors
cn: Actors
description: All actors
objectClass: groupOfUniqueNames
uniqueMember: uid=tcruise,ou=Users,dc=example,dc=com

# Employees (Directors)
dn: ou=Directors, ou=Employees, ou=Groups, dc=example, dc=com
ou: Directors
cn: Directors
description: All directors
objectClass: groupOfUniqueNames
uniqueMember: uid=sspielberg,ou=Users,dc=example,dc=com

示例中的用户可以分配到多个组,每个组都有特定的授权级别。因此,我需要获取用户所分配的所有组以及他们的父组(即tcruise - Actors, Employees)。在这一点上,我找不到解决这个问题的任何例子。作为解决方案,我想到的是:

  1. 通过执行(&(objectclass=groupOfUniqueNames)(uniqueMember=uid=sspielberg,ou=Users,dc=example,dc=com))
  2. 向数据库发送查询,检索用户所分配的所有组
  3. 解析群组dn(即按,拆分并删除阵列中的第一条记录)
  4. parentGroup objectClass == groupOfUniqueNames
  5. 时查找父母

    虽然这可能有效,但我觉得这不对。我想知道是否有更好的方法来达到同样的效果?在这种情况下被认为是best practice的东西会在大多数LDAP服务器实现中起作用(除了AD,因为它们有解决这个问题的方法)?此外,您能否为我提供一个简单的示例代码或链接以及此问题的可能解决方案?

1 个答案:

答案 0 :(得分:0)

如果用户是多个组的成员,则应通过在组的“uniqueMember”属性中显示其DN来直接在每个组中表达。这也适用于父母团体。不要在结构上使用DIT来表达群体,从而使您的生活复杂化。所以你需要的只是(1)在你的清单中。

或者,Employee应该是一组组,其成员应该是Director,Actor等,因此当您检索用户的直接成员资格(如Actor)时,您将开始递归操作,查找这些组成员的组,如员工,添加,冲洗和重复。这可以在大约五行代码中完成。