LDAP設計

 如果你有使用數據庫的背景的話,你應該已經對模式比較熟悉。簡單的說,模式就是決定數據存儲 在數據庫或者是目錄中的存儲規則。模式非常重要,它幫助管理數據的完整性和質量。同時,模式能夠減少數據的重複、提供良好的格式以及給外部程序訪問和修改 數據提供一個預先定義好的規則。 

LDAP模式的元素:屬性類型、屬性語法、匹配規則、對象類(object classes) 



1、屬性 
1.1、屬性名 
屬性名有如下的屬性: 
1、大小寫無關 
2、屬性名可以 只限使用ASCII字母,數字,連接字符(-,不是下劃線);並且以字母開頭 
3、在整個目錄服務中,名字應該是唯一的 
合法命名:cn, telephoneNumber, postalAddress, one-way, faxPhone2, and pagesPerMinute 
非 法命名:last#, 2for2, my.boss, and favorite_drink 

一些標準的屬性因爲歷史的原因,用長的或短的名字命名都是可以的,如(commonName 和cn),但是大多數情況下,短的名字用的更多,在NDS裏面,長的名字有時候會用來做短名字的別名和同義詞。 

1.2、唯一標示屬性的OID 
OID是一組用點分隔的數字,如2.5.4.16,因爲在X.500系統裏面是用這種方式來標示屬性類型的。雖然OID能代替屬性名,但是實際上還 是用名字更多一些,因爲更容易使用。 

1.3、文本描述 

1.4、一個屬性類型的例子 
The description Attribute 
( 2.5.4.13 NAME 'description' EQUALITY caseIgnoreMatch SUBSTR caseIgnoreSubstringsMatch 
SYNTAX 1.3.6.1.4.1.1466.115.121.1.15{1024} ) 
翻譯一下就是,這個屬性名叫description,是一個字符 串,能容納1024個字符,使用caseIgnore系列比較規則,因此在比較的時候,字母的大小寫、開頭和結尾的空格都將被忽略,OID是 2.5.4.13 

1.5、屬性等級 
在一些LDAP的實現中,很明顯的跟最近的X.500標準一樣,支持屬性的subtype 


name(SuperType) 

------------------------------------ 
|   |    |                 |            |  | 
cn sn givenName initials   c  o (subtype) 

在上面的例子裏面,因爲cn、sn是name的subtype,所以當一個查詢條件要查詢所有name的值的時候,將會把name和它下面 的cn、sn等都返回。 
屬性等級是一個有趣的但是卻潛在者造成困苦的功能。大部分的LDAP實現並不支持。 

1.6、使用指示(標示是給應用程序還是給目錄服務用的) 

1.7、標示屬性值是否可以有重複的值 
一個屬性可能存儲多個值,可以通過multivalued來選擇,一般來說multivalued是一個缺省選項,因爲大多數屬性類型都是多值的。 

1.8、 標示能否被適當的程序修改 

1.9、約束屬性值的大小 


2、相關聯的屬性語法 
語法也有一個OID,標準語法如下: 

Table 8.2. Standard Syntaxes 
Syntax 
OID 
Description 
Binary 
1.3.6.1.4.1.1466.115.121.1.5 
按照Basic Encoding Rules (BER) 或者Distinguished Encoding Rules (DER)—for example, an X.509v3 certificate編碼 
Boolean 
1.3.6.1.4.1.1466.115.121.1.7 
TRUE or FALSE 
CountryString 
1.3.6.1.4.1.1466.115.121.1.11 
兩位國家代碼, 如US 
DirectoryString 
1.3.6.1.4.1.1466.115.121.1.15 
按照UTF8存儲的文本 

DN 



1.3.6.1.4.1.1466.115.121.1.12 
Distinguished name (pointer to another entry) in string (RFC 2253) format 
GeneralizedTime 
1.3.6.1.4.1.1466.115.121.1.24 
按照X.208格式的日期和時間—for example, 20010911134600Z 
IA5String 
1.3.6.1.4.1.1466.115.121.1.26 
ASCII文本字符串 
INTEGER 
1.3.6.1.4.1.1466.115.121.1.27 
整數值 
OctetString 
1.3.6.1.4.1.1466.115.121.1.40 
8進制 
PostalAddress 
1.3.6.1.4.1.1466.115.121.1.41 
多行的郵寄地址用$分行 
PrintableString 
1.3.6.1.4.1.1466.115.121.1.44 
可打印字符 
TelephoneNumber 
1.3.6.1.4.1.1466.115.121.1.50 
電話號碼,按照E.123格式 format—for example, +1 800 555-1212 
URI 
1.3.6.1.4.1.4401.1.1.1 
Uniform Resource Identifier—for example, a Uniform Resource Locator (URL) 



3、管理比較和搜索的匹配規則 

標準匹配規則 
Matching Rule 
Description 
booleanMatch 
布爾值比較,只有等於被支持 
caseIgnoreMatch 
大小寫忽略,開頭和結尾的空格被忽略 
caseExactMatch 
大小寫敏感,開頭和結尾的空格被忽略 
distinguishedNameMatch 
DN比較規則(RDN應該相同,並且類型和值必須匹配) 
integerMatch 
整數比較 
octetStringMatch 
二進制比較,一個字節一個字節的比較 
telephoneNumberMatch 
跟 caseIgnoreMatch類似 , 在比較時,連接符(-)和空格都忽略 

4、object classes 
寫到這裏,實際上我們可以對比一下關係型數據庫,前面關於屬性的東西可以理解是字段,而現在要提到的object classes類似於表了。只不過在DS裏面,屬性是全局的,而關係型數據庫裏面字段是對應表的;在DS裏面object classes對屬性的要求也比關係型數據庫對字段的要求要寬鬆很多。只是有一個必選和可選的字段要求。比方說person這個object class,cn、sn和objectclass是必須的,而其他的信息則是可選的。 

object class是有層次的: top->person->organizationalPerson->inetOrgPerson
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章