我的 LDAP 目录中有多个分支,它们都使用 UID 属性作为 DN 的一部分。最近,我被要求确保 UID 属性在整个目录中都是唯一的,这样 UID 就不会从一个子树匹配到另一个子树。
在一定程度上,使用 slapo-unique 确实有效。当我添加用户,但没有在 LDIF 或运行导入的应用程序中明确定义 UID 属性时,就会出现问题。
首先,我们假设我已经定义了以下规则:
olcUniqueURI: ldap:///dc=domain,dc=com?uid?sub?(objectClass=inetOrgPerson)
现在,举个例子,假设我有一个现有用户,其 DN 是“uid=userj,ou=People,dc=domain,dc=com”
然后我添加以下 ldif:
dn: uid=userj,ou=OtherPeople,dc=domain,dc=net
givenName: Joe
objectClass: inetOrgPerson
cn: Joe User
sn: User
uid: userj
mail: [email protected]
正如人们所料,我得到了一个关于 uid 唯一性的错误。现在,当我没有明确包含 UID,而是依靠它在导入时通过 slapd 进行设置时,问题就出现了,因为它被定义为可分辨名称:
dn: uid=userj,ou=OtherPeople,dc=domain,dc=net
givenName: Joe
objectClass: inetOrgPerson
cn: Joe User
sn: User
mail: [email protected]
这是允许的。添加此内容后,使用搜索过滤器“(uid=userj)”进行搜索将提取两个 DN:
uid=userj,ou=People,dc=domain,dc=com 和 uid=userj,ou=OtherPeople,dc=domain,dc=net
并且它们都将显示它们的 UID 属性设置为“userj”。查看 slapd 的调试日志,当我没有在 ldif 中明确设置 UID(这应该不是必需的,因为它是从新 DN 中暗示的)时,日志显示它从不向 LDAP 查询该 UID 属性。
那么,有人能建议我如何解决这个问题吗?显然,我建议人们始终隐式地定义 UID 属性,即使它是 DN 的一部分,但有些人很固执,喜欢想方设法违反约束。
提前致谢;