![如何将一个 ldap 属性的值与另一个 ldap 属性的值关联起来?](https://linux22.com/image/609991/%E5%A6%82%E4%BD%95%E5%B0%86%E4%B8%80%E4%B8%AA%20ldap%20%E5%B1%9E%E6%80%A7%E7%9A%84%E5%80%BC%E4%B8%8E%E5%8F%A6%E4%B8%80%E4%B8%AA%20ldap%20%E5%B1%9E%E6%80%A7%E7%9A%84%E5%80%BC%E5%85%B3%E8%81%94%E8%B5%B7%E6%9D%A5%EF%BC%9F.png)
由于各种原因,我已成为我工作场所事实上的 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=edu
?phone: 111-111-1111
或者departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu
?title: 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
这样,您便可以将与单个职位相关的所有字段保存在一个对象中,而用户的对象就是容器。这样一来,搜索和处理任意数量的职位就变得非常简单了。