По разным причинам я фактически стал администратором LDAP на своем рабочем месте. Я изучаю это на работе уже около года. Итак, когда я описываю вещи, не стесняйтесь предлагать лучшие способы делать что-то.
У меня есть Novell eDirectory, в котором я храню информацию о сотрудниках. В основном он используется для аутентификации различных веб-сервисов, таких как Moodle или Drupal. Но я также использую его как серверную часть для нового каталога сотрудников. Я не видел смысла дублировать данные, кроме того, что они уже дублировались. Кроме того, каталог сотрудников звучит как раз для того, для чего был создан LDAP.
Я создал записи для каждого офиса, затем установил атрибут для каждого пользователя, который ссылается на dn записи office для их офиса. Проблема, с которой я столкнулся сейчас, заключается в том, что у каждого офиса, вероятно, есть свой номер телефона. Таким образом, сотрудники, у которых более одного офиса (например, если они работают в нескольких кампусах), имеют более одного номера телефона. Поскольку номера телефонов следуют за сотрудником, я не могу просто присвоить номер записи в офисе. Итак, мне нужно как-то сказать: «Этот номер телефона для этого офиса».
Если бы это была база данных 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.
В офисах есть объектные классы: настраиваемый объектный класс, содержащий настраиваемую ссылку dn на запись родительского кампуса, ndsLoginProperties, organizationPerson, 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=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 phone: 555-555-5555
dn: cn = номер телефона, ou = идентификатор пользователя, ou = метаданные, dc = College, dc = edu officedn: cn = MAIN222, ou = locations, dc = College, dc = edu phone: 111-111-1111 ''
Я надеялся, что есть более чистый способ достичь того, что я хочу.
Почему бы просто не создать объект для каждой позиции, который включает служебную и связанную информацию в одном объекте?
Так:
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
Таким образом, вы сохраняете все поля, относящиеся к одной позиции, в одном объекте, а пользовательский объект является контейнером. Это значительно упростит поиск и обработку произвольного количества позиций.