- 论坛徽章:
- 0
|
九纹龙的Openldap Schema配置笔记
写于2007年8月8日
Schema是作用什么:
定义目录数据库中条目的各种属性和对象。
定义Schema的步骤:
1、获取对象标识符OID
可以到IANA申请免费的OID,如果只是做做实验而不想麻烦地填申请表格的话,可以使用1.1这个OID。 OID用于计算机中对attribute(属性)和objectclass(对象类)的标识。
2、选择一个名称前缀
由于属性名或对象名不能有重复,所以以加前缀的方法以减少自定义的名称与其它相同
3、建立一个用户的schema文件
4、定义用户自定义的属性类型
5、定义用户自定义的对象类
本例中的OID分配规划:
OID 分配 保存的数据类型
1.1 MyLocal
1.1.2 MyLocal中的ldap元素
1.1.2.1 属性类型
1.1.2.1.100 myGraduate UTF-8 字符串
1.1.2.1.101 myStudentID UTF-8 字符串
1.1.2.1.102 myEnrollment 整数型
1.1.2.1.103 mySex UTF-8 字符串
1.1.2.2 对象类型
1.1.2.2.1 myObjectClass
建立用户的schema文件
在openldap中有一个schema目录,这是存放schema文件的地方,你可以将你建立的schema文件放在这里,当然也可以不。
用文本编辑器,如:linux下的vi, 或windows下的记事本新建一个文本文件,名字由你自己取,在本例中这个文件名被叫做:MyLocal.schema
假定用这个文件定义一个objectclass用于放有关的学生的资料,如,学生的毕业学校,学生学号,学生入学时间,学生的性别等。则我将在MyLocal.schema中输入下面的文本:
#########################################################
attributeType ( 1.1.2.1.100 NAME 'myGraduate'
DESC 'Student graduate school with MyLocal'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
attributeType ( 1.1.2.1.101 NAME 'myStudentID'
DESC 'Student ID with MyLocal'
SUP myGraduate
SINGLE-VALUE )
attributeType ( 1.1.2.1.102 NAME 'myEnrollment'
DESC 'The year of Student first enrollment with MyLocal'
SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
attributeType ( 1.1.2.1.103 NAME 'mySex'
DESC 'Student Sex with MyLocal'
EQUALITY caseIgnoreMatch
SUBSTR caseIgnoreSubstringsMatch
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{20} )
objectclass ( 1.1.2.2.1 NAME 'myObjectClass'
DESC 'My object class with MyLocal'
AUXILIARY
MUST myStudentID
MAY ( myGraduate $ myEnrollment $ mySex ) )
##################################################################
以上由“#”号构成的行的中间部分就是我们自己定义的schema文件中的内容.
文件建立后,需要在openldap的slapd.conf文件中加入一条include,将自定义的schema文件包含进来,例如:
include /etc/openldap/schema/MyLocal.schema
注:
如果你使用phpldapadmin来管理你的openldap服务器,当添加的条目中有使用上例的myObjectClass时会报错,
原因是上例中的myObjectClass中定义了一个必选属性myStudentID(由"MUST myStudentID"定义).
这不是说schema有错,而是phpldapadmin有问题.你可以删除"MUST myStudentID",
将myStudentID加入到MAY后面中去,即: MAY ( myStudentID $ myGraduate $ myEnrollment $ mySex ) )
下面是这些内容中的具体意思。为了说明方便,在每一行前加入一个数字。
1 attributeType ( 1.1.2.1.100 NAME 'myGraduate'
2 DESC 'Student graduate school with MyLocal'
3 EQUALITY caseIgnoreMatch
4 SUBSTR caseIgnoreSubstringsMatch
5 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
6
7 attributeType ( 1.1.2.1.101 NAME 'myStudentID'
8 DESC 'Student ID with MyLocal'
9 SUP myGraduate
10 SINGLE-VALUE )
11
12 attributeType ( 1.1.2.1.102 NAME 'myEnrollment'
13 DESC 'The year of Student first enrollment with MyLocal'
14 SYNTAX 1.3.6.1.4.1.1466.115.121.1.27 )
15
16 attributeType ( 1.1.2.1.103 NAME 'mySex'
17 DESC 'Student Sex with MyLocal'
18 EQUALITY caseIgnoreMatch
19 SUBSTR caseIgnoreSubstringsMatch
20 SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{32768} )
21
22 objectclass ( 1.1.2.2.1 NAME 'myObjectClass'
23 DESC 'My object class with MyLocal'
24 AUXILIARY
25 MUST myStudentID
26 MAY ( myGraduate $ myEnrollment $ mySex ) )
首先,需要知道的是在openldap文件就是用来定义attribute和objectclass的。
定义attribute和objectclass的语句分别如下:
attributetype AttributeTypeDescription
objectclass ObjectclassTypeDescription
其中的AttributeTypeDescription(属性类型描述)和ObjectclassTypeDescription(对象类类型描述)遵循BNF(巴克斯-诺尔形式)
以下是AttributeTypeDescription的BNF形式(参见《OpenLDAP Software Administrator Guide》):
AttributeTypeDescription = "(" whsp
numericoid whsp ; 属性类型标识,如例中第1行中的 1.1.2.1.100
[ "NAME" qdescrs ] ; 属性类型名,如例中第1行中的 NAME 'myGraduate'
[ "DESC" qdstring ] ; 内容描述,如例中第2行中的 DESC 'Student graduate school with MyLocal'
[ "OBSOLETE" whsp ] *
[ "SUP" woid ] ; 本属性从其它属性中派生出来的,如例中第9行 SUP myGraduate
[ "EQUALITY" woid ; Matching Rule name
[ "ORDERING" woid ; Matching Rule name 匹配规则名,其值在《OpenLDAP Software Administrator Guide》第九章"Commonly Used Matching Rules"表有描述
[ "SUBSTR" woid ] ; Matching Rule name 如例中第3、4行
[ "SYNTAX" whsp noidlen whsp ] ; Syntax OID 语法的OID,其值在《OpenLDAP Software Administrator Guide》第九章"Commonly Used Syntaxes"表有描述.如例中第5
[ "SINGLE-VALUE" whsp ] ; 定义本属性为单值,默认为多值
[ "COLLECTIVE" whsp ] ; default not collective *
[ "NO-USER-MODIFICATION" whsp ]; default user modifiable
[ "USAGE" whsp AttributeUsage ]; default userApplications *
whsp ")"
AttributeUsage = * 带*号部分不知何用,望老鸟指点!!!
"userApplications" / *
"directoryOperation" / *
"distributedOperation" / ; DSA-shared *
"dSAOperation" ; DSA-specific, value depends on server *
以下是ObjectclassTypeDescription的BNF形式(参见《OpenLDAP Software Administrator Guide》):
ObjectClassDescription = "(" whsp
numericoid whsp ; ObjectClass identifier 对象类标识,如例中22行中的 1.1.2.2.1
[ "NAME" qdescrs ]
[ "DESC" qdstring ]
[ "OBSOLETE" whsp ]
[ "SUP" oids ] ; Superior ObjectClasses 指定上级的对象类
[ ( "ABSTRACT" / "STRUCTURAL" / "AUXILIARY" ) whsp ] 默认是"STRUCTURAL", 这三者的区别是什么,只用过"AUXILIARY",如例中第24行
[ "MUST" oids ] ; 必须的属性,如例中第25行
[ "MAY" oids ] ; 可选的属性,如例中第26行
whsp ")"
说明:
以上BNF中whsp表示' '空格; numericoid是全球唯一的用点分十进制数表示的OID; qdescrs可以是一个或多个的名字;
在例子中第5行和第20行有一个{}括号括起的部分,这是指定数据 |
|