Атрибут-член для объекта 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
• если модули то
- ldapmodify -Q -Y ВНЕШНИЙ -H ldapi:///
- DN: cn=модуль{0},cn=config
- тип изменения: изменить
- добавить: олкмодулелоад
- olcModuleLoad: memberof.la
- Нажмите Enter
при изменении записи "cn=module{0},cn=config" должно отображаться
• если нет модулей, то
- ldapadd -Y ВНЕШНИЙ -Q -H ldapi:///
- DN: cn=модуль,cn=config
- Сп: модуль
- класс объекта: олкмодулелист
- olcModulePath: /usr/lib/ldap (ищите memberof.la, чтобы найти правильный путь)
- olcModuleLoad: memberof.la
- Нажмите 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".
Я предполагаю, что вы хотите добавить атрибут memberOf в inetOrgPerson. Для этого вам нужно определить тип атрибута "memberOf" и отредактировать класс объекта inetOrgPerson в схеме. Сначала вы должны добавить тип атрибута, потому что класс объекта ссылается на него.
(см. также: Добавление элементов схемы в Apache DS)