¿Cómo puedo relacionar el valor de un atributo ldap con el valor de otro?

¿Cómo puedo relacionar el valor de un atributo ldap con el valor de otro?

Por diversas razones, me convertí en el administrador LDAP de facto en mi lugar de trabajo. Lo he estado aprendiendo en el trabajo durante aproximadamente un año. Entonces, mientras describo las cosas, siéntete libre de sugerir mejores formas de hacer las cosas.

Tengo un Novell eDirectory en el que almaceno la información de los empleados. Su uso principal es autenticar varios servicios web como Moodle o Drupal. Pero también lo estoy usando como backend para un nuevo Directorio de empleados. No vi ningún sentido en duplicar los datos, ya que ya estaban duplicados. Además, un directorio de empleados parece exactamente el tipo de cosa para la que se creó LDAP.

Creé entradas para cada oficina, luego configuré un atributo en cada usuario que hace referencia al dn de la entrada de la oficina de su oficina. El problema que tengo ahora es que probablemente cada oficina tenga su propio número de teléfono. Así, los empleados que tienen más de una oficina (si trabajan en más de un campus, por ejemplo) tienen más de un número de teléfono. Dado que los números de teléfono siguen al empleado, no puedo simplemente asignar el número a la entrada de la oficina. Entonces, necesito alguna forma de decir "este número de teléfono es para esta oficina".

Si se tratara de una base de datos MySQL, simplemente crearía una tabla que asigne las cosas como quiera.

¿Existe una estructura similar que pueda usar en LDAP? ¿O un método equivalente?

Para dar un ejemplo detallado de lo que estoy hablando, aquí hay un pseudo ldif de una entrada de empleado:

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

Entonces, ¿cómo me relacionaría: officedn: cn=DC107,ou=locations,dc=college,dc=educon phone: 555-555-5555?

O officedn: cn=MAIN222,ou=locations,dc=college,dc=edupara phone: 111-111-1111?

O departmentdn: cn=math,ou=departments,ou=groups,dc=college,dc=edupara title: professor of discrete math?

Etcétera...

Algunas notas, por si son relevantes:

Creé atributos personalizados para los dn de la oficina y el departamento usando la sintaxis de DN 1.3.6.1.4.1.1466.115.121.1.12.

Las entradas de departamento tienen objectClasses groupOfNames, nestedGroupAux y Top.

Las oficinas tienen objectClasses: una objectClass personalizada que contiene la referencia dn personalizada a la entrada de su campus principal, ndsLoginProperties, OrganizationalPerson, Person y Top.

Las entradas de usuario son las mismas que las de oficinas, más posixAccount.

¿Hay alguna otra información que deba proporcionar?

Edite para solucionar problemas para los cuales los comentarios son demasiado cortos:

Si creo otra entrada que contiene la metainformación, como se describe enhttps://serverfault.com/a/500129/99647Necesitaría crear una metaentrada por número de teléfono y por puesto de trabajo.

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

No funcionaría porque no hay forma de que una computadora se dé cuenta de que el administrador de sistemas web no utiliza las matemáticas, pero sí las utiliza.

Antes de publicar la pregunta, el método que pensé fue algo así como crear una ou para todos los metadatos: ou=metadata,dc=college,dc=eduLuego una ou para cada usuario: ou=userid,ou=metadata,dc=college,dc=eduLuego una entrada por puesto de trabajo y número de teléfono que los vincula con sus departamentos y oficinas:

``` dn: cn=jobtitle,ou=userid,ou=metadatos,dc=college,dc=edu oficinadn: cn=DC107,ou=ubicaciones,dc=college,dc=edu teléfono: 555-555-5555

dn: cn=número de teléfono,ou=ID de usuario,ou=metadatos,dc=college,dc=edu oficinadn: cn=MAIN222,ou=ubicaciones,dc=college,dc=edu teléfono: 111-111-1111 ```

Esperaba que hubiera una manera más limpia de lograr lo que quiero.

Respuesta1

¿Por qué no simplemente crear un objeto para cada puesto que incluya la información oficial y relacionada en el mismo objeto?

Entonces:

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

De esa manera, mantienes todos los campos relevantes para una única posición en un objeto, y el objeto del usuario es el contenedor. Esto hará que la búsqueda y el procesamiento de un número arbitrario de posiciones sean extremadamente sencillos.

información relacionada