
По разным причинам я стал фактическим администратором 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
Таким образом, вы сохраняете все поля, относящиеся к одной позиции, в одном объекте, а объект пользователя является контейнером. Это сделает поиск и обработку произвольного количества позиций чрезвычайно простыми.