如何将一个 ldap 属性的值与另一个 ldap 属性的值关联起来?

如何将一个 ldap 属性的值与另一个 ldap 属性的值关联起来?

由于各种原因,我已成为我工作场所事实上的 LDAP 管理员。我在工作中学习它已有大约一年了。因此,当我描述事情时,请随意提出更好的做事方式。

我有一个 Novell eDirectory,用于存储员工信息。它的主要用途是验证各种 Web 服务,如 Moodle 或 Drupal。但我还将其用作新员工目录的后端。我认为没有必要再复制数据,因为数据已经复制过了。此外,员工目录听起来正是 LDAP 的用途。

我为每个办公室创建了条目,然后为每个用户设置了一个属性,该属性引用了他们办公室的办公室条目的 DN。我现在遇到的问题是每个办公室可能都有自己的电话号码。因此,拥有多个办公室的员工(例如,如果他们在多个校园工作)有多个电话号码。由于电话号码跟随员工,我不能直接将号码分配给办公室条目。所以,我需要某种方式来表示“这个电话号码是这个办公室的。”

如果这是一个 MySQL 数据库,我只需创建一个表来按我想要的方式映射事物。

在 LDAP 中是否有类似的结构可供使用?或者有等效的方法?

为了详细地说明我正在谈论的内容,这里有一个员工条目的伪 ldif:

dn: cn=user,ou=staff,dc=college,dc=edu
officedn: cn=DC107,ou=locations,dc=college,dc=edu
officedn: cn=MAIN222,ou=locations,dc=college,dc=edu
phone: 555-555-5555
phone: 111-111-1111
departmentdn: cn=it,ou=departments,ou=groups,dc=college,dc=edu
departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu
title: web systems admin
title: professor of discrete math

那么,我该如何与……联系 officedn: cn=DC107,ou=locations,dc=college,dc=edu起来phone: 555-555-5555

或者officedn: cn=MAIN222,ou=locations,dc=college,dc=eduphone: 111-111-1111

或者departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edutitle: professor of discrete math

等等...

一些注释,以防它们相关:

我使用 DN 语法 1.3.6.1.4.1.1466.115.121.1.12 为办公室和部门 DN 创建了自定义属性。

部门条目具有 objectClasses groupOfNames、nestedGroupAux 和 Top。

办公室有 objectClasses:自定义 objectClass,包含对其父校园条目、ndsLoginProperties、organizationalPerson、Person 和 Top 的自定义 dn 引用。

用户条目与办公室相同,加上 posixAccount。

我还应该提供其他信息吗?

编辑以解决评论太短的问题:

如果我创建另一个包含元信息的条目,如下所述https://serverfault.com/a/500129/99647我需要为每个电话号码和每个职位创建一个元条目。

dn: cn=MAIN222,cn=user,ou=staff,dc=college,dc=edu officedn: cn=MAIN222,ou=locations,dc=college,dc=edu phone: 111-111-1111 departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu title: professor of discrete math departmentdn: cn=it,ou=departments,ou=groups,dc=college,dc=edu title: web systems admin

行不通,因为计算机无法弄清楚 Web 系统管理员不从事数学工作,但却从事数学工作。

在我发布这个问题之前,我想到的方法是创建一个适用于所有元数据的 ou:ou=metadata,dc=college,dc=edu然后为每个用户创建一个 ou:ou=userid,ou=metadata,dc=college,dc=edu然后每个职位和电话号码创建一个条目,将他们与他们的部门和办公室联系起来:

dn:cn=jobtitle,ou=userid,ou=metadata,dc=college,dc=edu officedn:cn=DC107,ou=locations,dc=college,dc=edu 电话:555-555-5555

dn:cn=phonenumber,ou=userid,ou=metadata,dc=college,dc=edu officedn:cn=MAIN222,ou=locations,dc=college,dc=edu 电话:111-111-1111```

我希望有一种比这更干净的方法来实现我的目标。

答案1

为什么不为每个职位创建一个对象,并在同一个对象中包含 officedn 和相关信息?

所以:

dn: cn=DC107,cn=user,ou=staff,dc=college,dc=edu
officedn: cn=DC107,ou=locations,dc=college,dc=edu
phone: 555-555-5555
departmentdn: cn=it,ou=departments,ou=groups,dc=college,dc=edu
title: web systems admin

dn: cn=MAIN222,cn=user,ou=staff,dc=college,dc=edu
officedn: cn=MAIN222,ou=locations,dc=college,dc=edu
phone: 111-111-1111
departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu
title: professor of discrete math

这样,您便可以将与单个职位相关的所有字段保存在一个对象中,而用户的对象就是容器。这样一来,搜索和处理任意数量的职位就变得非常简单了。

相关内容