Назад | Перейти на главную страницу

LDAP: измените обязательные поля класса и перенесите предыдущие записи

Я использую электронную почту моих пользователей в моем классе LDAP как обязательную:

// schema.ldif
objectClasses: ( 2.25.XXXX.3 NAME 'user' SUP inetOrgPerson STRUCTURAL MUST mail MAY ( XXX ) )

И мой пользователь хранится в моем ldap с DN:

mail=toto@example.com,ou=people,dc=company,dc=com

По разным причинам я хотел бы теперь использовать userId для Dn, поэтому моя схема будет выглядеть так:

// schema.ldif
objectClasses: ( 2.25.XXXX.3 NAME 'user' SUP inetOrgPerson STRUCTURAL MUST (mail, userid) MAY (XXX) )

И теперь DN будет выглядеть так (почта является обязательной, но не используется в Dn):

userid=325448,ou=people,cd=company,dc=com

Как я могу это сделать? Есть ли процедура для переноса класса объекта из одной схемы в другую?

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

Другая идея - сделать userId полем MAY на первом этапе, затем заполнить его, затем сделать его ОБЯЗАТЕЛЬНЫМ, а затем использовать modifyDn для изменения DN всех пользователей. Это сработает?

Есть какие-нибудь мнения по этому поводу?

Если это может помочь, мы используем OpenDJ для LDAP-сервера.

Поскольку изменение схемы в основном совместимо (только добавление ограничения), с OpenDJ вы можете изменить определение объектного класса, удалив старое значение и добавив новое значение, используя ldapmodify (of cn = schema). Сервер OpenDJ продолжит возвращать все записи, но потребует, чтобы вы обновили записи, которые не имеют значения идентификатора пользователя, прежде чем вносить какие-либо другие изменения.

Вы можете использовать LDAP ModDN, чтобы изменить атрибут, который используется в DN для каждой записи.

Изменение LDIF будет выглядеть так:

dn: mail=toto@example.com,ou=people,dc=company,dc=com
changetype: moddn
newdn: userid=325448
deleteoldrdn: false
-

Обратите внимание, что вам не нужно останавливать сервер, чтобы внести все эти изменения.