导入OpenLDAP数据时memberOf属性重复错误求助
解决OpenLDAP导入时memberOf属性重复冲突问题
问题原因
你用slapcat -n 1 -l directory.ldif导出的LDIF文件中,包含了memberOf属性的schema定义(OID: 1.2.840.113556.1.2.102),而新版本OpenLDAP已经通过memberOf overlay内置了该属性,导入时触发重复定义错误,导致导入中断,且memberOf数据无法自动生成。
解决方案
1. 预处理导出的LDIF文件,移除重复的memberOf schema定义
打开directory.ldif文件,执行以下操作:
- 找到以
dn: cn=schema,cn=config开头的条目,删除其中包含attributeTypes: ( 1.2.840.113556.1.2.102 ... )的整行内容。 - 如果文件中存在单独的memberOf schema条目(比如
dn: cn=memberof,cn=schema,cn=config),直接删除该条目块(从该dn行开始,到下一个dn行前的所有内容)。
2. 确认新版本OpenLDAP的memberOf overlay配置正确
检查模块是否加载
执行命令:
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b cn=config '(objectClass=olcModuleList)' olcModuleLoad
输出中需包含olcModuleLoad: memberof.la(或.so,取决于系统架构)。
检查数据库实例是否启用overlay
执行命令(替换{1}mdb为你的数据库实例标识):
ldapsearch -Q -LLL -Y EXTERNAL -H ldapi:/// -b olcDatabase={1}mdb,cn=config '(objectClass=olcMemberOfConfig)'
输出中需包含olcMemberOf: on等启用配置。
3. 重新导入处理后的LDIF
使用清理后的LDIF文件执行导入:
slapadd -n 1 -l cleaned_directory.ldif
导入完成后重启slapd服务,memberOf overlay会自动根据用户所属群组的member属性,反向填充用户的memberOf字段。
4. 验证结果
搜索任意用户条目,检查memberOf属性是否生成:
ldapsearch -x -LLL -b "ou=users,dc=yourdomain,dc=com" "(uid=testuser)" memberOf
注意事项
- 不要手动在LDIF中添加
memberOf属性值,该属性由memberOf overlay自动维护,手动添加会引发冲突。 - 若旧版本OpenLDAP是通过手动schema定义的memberOf,新版本切换为overlay后,必须彻底移除旧的schema定义,否则冲突会持续存在。
内容的提问来源于stack exchange,提问作者James Korden
相关产品推荐
相关产品推荐

