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

出于各种原因,我已经成为我工作场所中事实上的LDAPpipe理员。 我已经在工作中学习了大约一年了。 所以,当我描述的东西,随意提出更好的做事方式。

我有一个Novell eDirectory,用于存储员工信息。主要用于validation各种Web服务,如Moodle或Drupal。 但是我也将其用作新员工目录的后端。 我没有看到任何重复数据的点,而已经被重复了。 另外,员工目录听起来正是LDAP所做的事情。

我为每个办公室创build了条目,然后为每个用户build立一个属性,引用其办公室的办公室条目的dn。 我现在面临的问题是每个办公室都有自己的电话号码。 因此,拥有多个办公室的员工(例如,如果他们在多个校园工作)拥有多个电话号码。 由于电话号码跟随员工,我不能只将该号码分配到办公室条目。 所以,我需要一些方法来说,“这个电话号码是为这个办公室。”

如果这是一个MySQL数据库,我只是创build一个表,映射的东西,无论我想要的。

有没有类似的结构,我可以在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=eduphone: 555-555-5555

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

or departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edu to title: professor of discrete math

等等…

有些笔记,以防万一它们是相关的:

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

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

办公室拥有objectClasses:一个自定义的objectClass,包含对其父校园入口ndsLoginProperties,organizationalPerson,Person和Top的自定义dn引用。

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

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

编辑以解决问题,对于以下内容,评论太短:

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

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

不行,因为没有办法让电脑弄清楚networking系统pipe理员不会去math,但是会随之而来。

在我发布这个问题之前,我想到的方法就像是为所有元数据创build一个ou ou=metadata,dc=college,dc=edu然后为每个用户创build一个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“`

我希望有一个比我想要的更完美的方法。

为什么不为每个包含同一个对象的相关信息的位置创build一个对象呢?

所以:

 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 

这样,您将所有与单个位置相关的字段保留在一个对象中,而用户的对象就是容器。 这将使search和处理任意数量的职位非常简单。