我将 LDAP 类中用户的电子邮件设置为‘必须’:
// schema.ldif
objectClasses: ( 2.25.XXXX.3 NAME 'user' SUP inetOrgPerson STRUCTURAL MUST mail MAY ( XXX ) )
我的用户使用 DN 存储在我的 ldap 中:
[email protected],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
我该怎么做?是否有将对象类从一个模式迁移到另一个模式的过程?
我可以在我的程序中编写一个迁移过程,以便它迭代所有条目并正确填充该用户 ID,但我在 LDAP 文档中找不到有关此内容的任何信息。
另一个想法是首先将 userId 设为 MAY 字段,然后填充它,然后将其设为 MUST,然后使用modifyDn 更改所有用户的 DN。这样可行吗?
对此有什么意见吗?
如果有帮助,我们将使用 OpenDJ 作为 LDAP 服务器。
答案1
由于架构更改大部分兼容(仅添加约束),因此使用 OpenDJ,您可以通过删除旧值并添加新值来更改 objectclass 定义,方法是使用 ldapmodify(cn=schema)。OpenDJ 服务器将继续返回所有条目,但要求您在进行任何其他更改之前更新没有用户 ID 值的条目。
您可以使用 LDAP ModDN 更改每个条目的 DN 中使用的属性。
LDIF 中的更改将如下所示:
dn: [email protected],ou=people,dc=company,dc=com
changetype: moddn
newdn: userid=325448
deleteoldrdn: false
-
请注意,您不需要停止服务器来进行所有这些更改。