Как связать значение одного атрибута ldap со значением другого?

Как связать значение одного атрибута ldap со значением другого?

По разным причинам я стал фактическим администратором LDAP на своем рабочем месте. Я изучаю это на работе уже около года. Поэтому, когда я описываю вещи, не стесняйтесь предлагать лучшие способы их выполнения.

У меня есть Novell eDirectory, в котором я храню информацию о сотрудниках. Его основное применение — аутентификация различных веб-сервисов, таких как 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 офисов и отделов, используя синтаксис DN 1.3.6.1.4.1.1466.115.121.1.12.

Записи отделов имеют объектные классы groupOfNames, nestedGroupAux и Top.

Офисы имеют objectClasses: пользовательский objectClass, содержащий пользовательскую ссылку dn на запись родительского кампуса, ndsLoginProperties, organizationalPerson, Person и Top.

Данные пользователей такие же, как и для офисов, плюс 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

Это не сработает, поскольку компьютер не сможет понять, что администратор веб-систем не разбирается в математике, а вот он разбирается.

До того, как я опубликовал вопрос, я придумал метод, похожий на создание OU для всех метаданных: ou=metadata,dc=college,dc=eduЗатем OU для каждого пользователя: ou=userid,ou=metadata,dc=college,dc=eduЗатем запись для каждой должности и номера телефона, которая связывала бы их с их отделами и офисами:

``` dn: cn=должность,ou=идентификатор пользователя,ou=метаданные,dc=колледж,dc=edu officedn: cn=DC107,ou=местоположения,dc=колледж,dc=edu телефон: 555-555-5555

dn: cn=номер_телефона,ou=идентификатор_пользователя,ou=метаданные,dc=колледж,dc=edu officedn: cn=MAIN222,ou=местоположения,dc=колледж,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

Таким образом, вы сохраняете все поля, относящиеся к одной позиции, в одном объекте, а объект пользователя является контейнером. Это сделает поиск и обработку произвольного количества позиций чрезвычайно простыми.

Связанный контент