OpenLDAP中如何配置两个同类型mdb后端数据库?
在OpenLDAP中配置两个MDB后端数据库的问题
我正尝试为两个域搭建OpenLDAP环境,了解到需配置两个数据库。此前参考方案使用bdb后端,但OpenLDAP已不再自带该后端,因此尝试配置第二个mdb后端数据库却未能成功。
用于创建数据库的ldif文件如下:
dn: olcDatabase=mdb2,cn=config changetype: add objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDbDirectory: /var/lib/ldap2/ olcDatabase: mdb olcDbIndex: objectClass eq olcDbIndex: cn,uid eq olcDbIndex: uidNumber,gidNumber eq olcDbIndex: member,memberUid eq olcLastMod: TRUE olcSuffix: dc=domain2,dc=com olcAccess: to attrs=userPassword by self write by anonymous auth by * none olcAccess: to attrs=shadowLastChange by self write by users read olcAccess: to * by users read olcRootDN: cn=admin,dc=domain2,dc=com olcRootPW: {SSHA}<HASH>
执行该ldif文件返回错误:value of single-valued naming attribute 'olcDatabase' conflicts with value present in entry
尝试将olcDatabase: mdb替换为olcDatabase: mdb2后,返回错误:Unrecognized database type (mdb2)
请问在OpenLDAP中是否可以配置两个使用相同后端的数据库?
问题解答
OpenLDAP完全支持配置多个同类型(比如MDB)的后端数据库,你的问题出在LDIF文件的配置细节上。
错误原因分析
- 第一个错误:
value of single-valued naming attribute 'olcDatabase' conflicts with value present in entryolcDatabase是单值属性,你在DN中写了olcDatabase=mdb2,但属性字段里填的是olcDatabase: mdb,两者不匹配导致冲突。 - 第二个错误:
Unrecognized database type (mdb2)
OpenLDAP的数据库类型只有mdb,不存在mdb2这个类型,不能自定义后端类型名称。
正确的LDIF配置示例
要创建第二个MDB数据库,需满足两个核心要求:
- DN中的
olcDatabase=<标识>可以用任意唯一名称(比如mdb2),但属性字段里的olcDatabase必须固定为mdb(对应官方支持的后端类型) olcDbDirectory必须是新的空目录,且OpenLDAP进程用户(通常是openldap)拥有读写权限
修正后的LDIF文件:
dn: olcDatabase=mdb2,cn=config changetype: add objectClass: olcDatabaseConfig objectClass: olcMdbConfig olcDbDirectory: /var/lib/ldap2/ olcDatabase: mdb olcDbIndex: objectClass eq olcDbIndex: cn,uid eq olcDbIndex: uidNumber,gidNumber eq olcDbIndex: member,memberUid eq olcLastMod: TRUE olcSuffix: dc=domain2,dc=com olcAccess: to attrs=userPassword by self write by anonymous auth by * none olcAccess: to attrs=shadowLastChange by self write by users read olcAccess: to * by users read olcRootDN: cn=admin,dc=domain2,dc=com olcRootPW: {SSHA}<HASH>
额外操作步骤
- 提前创建目录并设置权限:
mkdir /var/lib/ldap2 chown openldap:openldap /var/lib/ldap2 chmod 700 /var/lib/ldap2 - 执行LDIF文件的正确命令:
ldapadd -Y EXTERNAL -H ldapi:/// -f your-file.ldif - 确保两个数据库的
olcSuffix完全独立,避免请求路由冲突
内容的提问来源于stack exchange,提问作者JeffLee
相关产品推荐
相关产品推荐

