九紋龍的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行有一個{}括弧括起的部分,這是指定數據
《解決方案》
不錯的文章,受教了.:)
《解決方案》
睇不出問題所在!
《解決方案》
看上去有些亂,再重新整理一下格式會好許多