Атрибут-член для объекта inetOrgPerson в ApacheDS

Я использую ApacheDS в качестве сервера LDAP. Мне нужно несколько групп для управления разрешениями на разные приложения. Например, группа под названием "jira-users", которые могут войти в jira. Поэтому мне нужен атрибут, где я могу хранить группы пользователей пользователя. Я использую объектный класс с именем inetOrgPerson, который кажется пригодным для хранения пользователей.

Из Active Directory, над которым я работал в прошлом, я помню атрибут с именем memberOf. Кажется, что это зависит от AD, так как класс inetOrgPerson имеет атрибут с именем member. Согласно документации, он делает то же самое: Хранение групп, членом которых является пользователь. Но когда я пытаюсь добавить это в объект inetOrgPerson, я получаю следующую ошибку в Apache Directory studio:

Предупреждение! Этот атрибут не разрешен согласно схеме! Вы хотели бы все еще использовать это?

Когда я пытаюсь нажать " да", я получаю следующее исключение:

Fehler beim Ausführen des LDIF - [LDAP: код ошибки 65 - OBJECT_CLASS_VIOLATION: сбой для MessageType: MODIFY_REQUES java.lang.Exception: [LDAP: код ошибки 65 - OBJECT_CLASS_VIOLATION: сбой для MessageType: MODIFY_REQUEST Объект запроса c: 262: ID объекта запроса: 262: ID объекта запроса: 262: ID объекта запроса: 262: идентификатор объекта запроса: 26: идентификатор объекта запроса: 26: ИД объекта запроса: 262: идентификатор объекта запроса: 26: идентификатор объекта запроса: 26: ИД объекта запроса: 262: идентификатор объекта запроса: 26: ИД объекта запроса: 262: идентификатор объекта запроса: 26: ИД объекта запроса: 262: ID запроса: 26 =Testuser,ou= пользователь,dc= пример,dc=com'Модификация [0] Операция: добавить члена модификации: cn=Testgruppe,ou= пользователь,dc= пример,dc=comorg.apache.directory.api.ldap.model.message.ModifyRequestImpl@868031e2: ERR_277 Элемент атрибута не объявлен в объектных классах записи cn=Testuser,ou=user,dc=example,dc=com] в org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.checkResponse(DirectoryApiConnectionWrapper.java:1268) в org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.access$9(DirectoryApiConnectionWrapper.java:1236) в org.apache.directory.core.nection.io.api.DirectoryApiConnectionWrapper$4.run(DirectoryApiConnectionWrapper.java:716) в org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.runAndMonitor(DirectoryApiConnectionWrapper.java:1163) в org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.checkConnectionAneAonApenAndAndAndRun org.apache.directory.studio.connection.core.io.api.DirectoryApiConnectionWrapper.modifyEntry(DirectoryApiConnectionWrapper.java:738) в org.apache.directory.studio.ldapbrowser.core.jobs.ImportLdifRunnabledecif.) в org.apache.directory.studio.ldapbrowser.core.jobs.ExecuteLdifRunnable.run(ExecuteLdifRunnable.java:123) в org.apache.directory.studio.ldapbrowser.core.jobs.UpdateEntryRunnable.jun59 (обновить)) в org.apache.directory.studio.connection.ui.RunnableContextRunner$1.run(RunnableContextRunner.java:116) в org.eclipse.jface.operation.ModalContext $ ModalContextThread.run (ModalContext.java:119)

[LDAP: код ошибки 65 - OBJECT_CLASS_VIOLATION: не удалось для MessageType: MODIFY_REQUEST ID сообщения: 262 Объект запроса на изменение: 'cn=Testuser,ou= пользователь,dc= пример,dc= com' Модификация [0] Операция: добавить элемент модификации: cn=Testgruppe,ou= пользователь,dc= пример,dc=comorg.apache.directory.api.ldap.model.message.ModifyRequestImpl@868031e2: ERR_277 Член атрибута не объявлен в объектных классах записи cn =Testuser,ou= user,dc= Например, DC = COM]

Я попытался добавить его, как описано здесь http://morenews.blogspot.de/2010/12/adding-active-directory-properties-to.html с помощью ldapadd. Это не дало мне ошибки, и когда я смотрю на ou = schema, cn =other, ou =objectClasses, я вижу свои вставленные значения. Но когда я создаю новый inetOrgPerson, я не могу его использовать! Что я делаю не так?

2 ответа

Настройте оверлей memberOf

• судо-я

• slapcat -n 0 | grep olcModuleLoad

• если модули то

  1. ldapmodify -Q -Y ВНЕШНИЙ -H ldapi:///
  2. DN: cn=модуль{0},cn=config
  3. тип изменения: изменить
  4. добавить: олкмодулелоад
  5. olcModuleLoad: memberof.la
  6. Нажмите Enter

при изменении записи "cn=module{0},cn=config" должно отображаться

• если нет модулей, то

  1. ldapadd -Y ВНЕШНИЙ -Q -H ldapi:///
  2. DN: cn=модуль,cn=config
  3. Сп: модуль
  4. класс объекта: олкмодулелист
  5. olcModulePath: /usr/lib/ldap (ищите memberof.la, чтобы найти правильный путь)
  6. olcModuleLoad: memberof.la
  7. Нажмите Enter

добавление новой записи "cn=module,cn=config" должно отображаться

• нажмите ctrl c

• slapcat -n 0 | grep olcModuleLoad

o olcModuleLoad: {0}back_mdb

o olcModuleLoad: {1}memberof.la

Применить наложение memberOf

ldapadd -Y ВНЕШНИЙ -H ldapi:///

DN: olcOverlay=memberof,olcDatabase={1}mdb,cn=config

объектный класс: олковерлайконфиг

класс объекта: олкмембероф

olcOverlay: член

olcMemberOfRefint: ИСТИНА

Нажмите Enter

при добавлении новой записи "olcOverlay=memberof,olcDatabase={1}mdb,cn=config" должно отображаться

нажмите ctrl с

На самом деле member Тип атрибута не "хранит группы, членом которых является пользователь", напротив, он содержит отличительные имена объектов, которые находятся в списке или в группе.

inetOrgPerson класс объекта не имеет и не должен содержать никаких атрибутов "member", groupOfNames делает и даже требует этого, поскольку представляет набор именованных объектов, которые хранятся в атрибуте "member".

(см. RFC 4519, RFC 2798)

Я предполагаю, что вы хотите добавить атрибут memberOf в inetOrgPerson. Для этого вам нужно определить тип атрибута "memberOf" и отредактировать класс объекта inetOrgPerson в схеме. Сначала вы должны добавить тип атрибута, потому что класс объекта ссылается на него.

(см. также: Добавление элементов схемы в Apache DS)

Другие вопросы по тегам