Ldap自定义Schema
1.创建 schema 文件
新建一个目录,用于存放 schema 文件
mkdir /schemaTest
创建 schema 文件
cd /schemaTest
//新建 schema 文件
vim demo.schema
编辑 schema 文件
attributetype (
2.16.840.1.113730.3.1.970
NAME 'usid'
DESC '用户 ID'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
attributetype (
2.16.840.1.113730.3.1.971
NAME 'dnn'
DESC 'LDAP DN'
EQUALITY caseExactMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
SINGLE-VALUE )
objectClass (
2.5.6.47
NAME 'demo'
DESC 'demo schema'
AUXILIARY
MUST ( usid )
MAY ( dnn ))
#说明
#attribute的第一行为 attribute 的 oid,oid 必须全局唯一;同理,objectclass的oid也需全局唯一
#第二行NAME为 attribue 的名称
#第三行DESC为 attribute 的描述信息
#第四行EQUALITY为字段匹配规则
#第五行SYNTAX为约束该字段的数据类型,类比于Java中 "String var"中的"String"
#第六行SINGLE-VALUE表示该attribute字段值唯一
【注意】attribute和objectClass的oid要定义成全局唯一,不可与系统中或其他自定义字段重复!
2.创建编译用的配置文件
vim test.conf
#内容
include /schemaTest/demo.schema
3.执行slaptest命令编译自定义的schema,生成.ldif等文件
#执行slapetest命令,生成ldif文件
slaptest -f test.conf -F /schemaTest
执行结果如下,即为编译成功
【注意】如果schema中定义了与系统默认的attribute,会产生冲突,弹出 attributetype: Inconsistent duplicate attributeType: “xx”,解决方式见问题1
4.修改ldif文件
找到/schemaTest/cn=config/cn=schema文件夹下cn={num}demo.ldif文件
cd /schemaTest/cn=config/cn=schema
修改num最大的cn={num}demo.ldif文件名称【当前未在第二步中引入其他schema文件,因此最大num为0】
mv cn={0}demo.ldif demo.ldif
修改demo.ldif文件中的内容
vim demo.ldif
修改红框中两个字段的值
修改后(cn与objectclasss的name保持一致):
5.执行slapadd命令,将该文件添加进OpenLDAP库
slapadd -l demo.ldif -n 0
如图所示,即为添加成功!
添加成功后,可在/etc/ldap/slap.d/cn=config/cn=schema文件夹下看到新生成的ldif文件
若弹出 value #0 olcAttributeTypes: Inconsistent duplicate attributeType: “xx”,解决方式见问题2
6.重启slapd服务
文件夹赋权
chmod -R 777 /etc/ldap/slap.d/cn=config/cn=schema
重启
#ctrl+p+q退出docker
#重启openldap容器
docker restart openLdap
7.通过Apache Directory Studio工具查看并添加
搜索demo,即可发现新增的ObjectClass
若搜索后不见新增的ObjectClass,且/etc/ldap/slap.d/cn=config/cn=schema文件夹下确实新增了对应的ldif文件,见问题3
问题
1.attributetype: Inconsistent duplicate attributeType: “xx”
与系统默认的attribute重复,产生冲突,例如字段"name"
若产生冲突,则不必重复定义该attribute,直接在objectclass中使用该字段即可
例:
#attributetype (
# 2.16.840.1.113730.3.1.920
# NAME 'name'
# DESC '用户姓名'
# EQUALITY caseExactMatch
# SYNTAX 1.3.6.1.4.1.1466.115.121.1.15
# SINGLE-VALUE )
objectClass (
2.5.6.47
NAME 'user'
DESC 'Users'
AUXILIARY
MUST ( name ))
2.value #0 olcAttributeTypes: Inconsistent duplicate attributeType: “xx”
这个问题是与其他schema中文件定义的attribute重复(如core.schema),产生冲突
不必重复定义该attribute,需引入重复字段对应的schema文件,在demo.schema中直接使用即可
例如 “street” 在core.schema中已经定义
则test.conf应改为:
include /etc/ldap/schema/core.schema
include /schemaTest/demo.schema
然后在demo.schema中即可直接使用street attribute
3.添加到OpenLDAP库后,检索不到新增的ObjectClass
若搜索后不见新增的ObjectClass,且/etc/ldap/slap.d/cn=config/cn=schema文件夹下确实新增了对应的ldif文件
卸载低版本的Apache Directory Studio
安装高版本的JDK与其对应的Apache Directory Studio