免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 8047 | 回复: 3

[ldap] 九纹龙的Openldap Schema配置笔记 [复制链接]

论坛徽章:
0
发表于 2007-08-08 09:43 |显示全部楼层
九纹龙的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行有一个{}括号括起的部分,这是指定数据

论坛徽章:
0
发表于 2007-08-19 20:47 |显示全部楼层
不错的文章,受教了.

论坛徽章:
0
发表于 2007-08-20 08:49 |显示全部楼层
睇不出问题所在!

论坛徽章:
0
发表于 2007-08-20 18:27 |显示全部楼层
看上去有些乱,再重新整理一下格式会好许多
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP