歡迎您光臨本站 註冊首頁

九紋龍的Openldap Schema配置筆記

←手機掃碼閱讀     火星人 @ 2014-03-04 , reply:0

九紋龍的Openldap Schema配置筆記

九紋龍的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行有一個{}括弧括起的部分,這是指定數據
《解決方案》

不錯的文章,受教了.:)
《解決方案》

睇不出問題所在!
《解決方案》

看上去有些亂,再重新整理一下格式會好許多

[火星人 ] 九紋龍的Openldap Schema配置筆記已經有343次圍觀

http://coctec.com/docs/service/show-post-36462.html