LDAP基礎概念
1.1、LDAP目錄結構
此圖爲樹形目錄結構,我將此跳過去了,因爲這個是按照“國家這種結構來劃分的”。如果你喜歡這樣看更好,如下還有一種:
樹也可以根據互聯網域名組主。這種命名方式正越來越受歡迎,因爲它允許使用DNS爲目錄服務定位 。這個LDAP目錄樹中使用基於域的命名。比較適合我的應用場景(從域名-->部門-->個人)。
1.2、條目(Entry)
條目(Entry)就是目錄管理的對象,他是LDAP中最基本的顆粒,就像字典中的詞條,或者是數據庫中的記錄。通常對LDAP的添加、刪除、更改、檢索都是以條目爲基本對象的。
每一個條目都有一個唯一的標識名(distinguished Name ,DN),比如(1.1中圖2互聯網域名樹形圖):cn=doubao,ou=Ops,dc=shuyun,dc=com。DN在語法上是由多個相對的標識名(distinguished Name ,DN)組成的,他們之間由逗號分隔。如果把DN看做對象的全路徑,那麼RDN就是其中的每一段路徑。通過DN的層次型語法結構,可以方便地表示出條目在LDAP樹中的位置。有時在不一致引起歧義的情況下,RDN也特指DN中最靠前的一段,而剩餘的部分稱爲父標識(Parent DN,PDN)。此處不再舉例。RDN本身也可以由多個值構成,比如OU=Tech+CN=doubao,dc=shuyun,dc=com中的RDN爲OU=Tech+CN=doubao,由2個值OU=Tech和CN=doubao組成,他們之間由加好隔開。
如果DN中含有一些特殊字符,比如:,=+<>;\",他們需要轉轉義符(\)來幫助表述。
1.3、屬性(Attribute)
每個條目都可以有很多屬性(Attribute),比如常見的人都有姓名、地址、電話等屬性。每個屬性都有名稱及對應的值,屬性值可以有單個、多個。比如你有多個電話。
LDAP爲人員組織機構中常見的對象都設計了屬性(比如commonName,surname)。下面有一些常用的別名(表1-3-1)
屬性 | 別名 | 語法 | 描述 | 值(舉例) |
commonName | cn | Directory String | 姓名 | doubao |
surname | sn | Directory String | 姓 | Chen |
organizationalUnitName | ou | Directory String | 單位(部門)名稱 | Tech |
organization | o | Directory String | 組織(公司)名稱 | shuyun |
telephoneNumber | Telephone Number | 電話號碼 | 110 | |
owner | DN | 該條目的擁有者 | cn=doubao,ou=ops,dc=shuyun | |
jpegPhoto | Binary | JPEG照片 | .. |
1.4、屬性類型(AttributeType)
每個屬性都有唯一的屬性類型(AttributeType),屬性類型約定屬性值的數據格式和語法類型(Syntax)。比如,屬性cellPhone的類型爲telephoneNumber,它規定了電話號碼是由數字組成的,其中允許插入一些分隔符,如連接符、括號、空格等。
屬性類型也約定了屬性值是否可以有多少個,多值屬性類型也可以使人員信息的組織變得更加靈活並接近現實情況,比如:人員的手機、地址、郵箱等屬性都可以有多個值。這樣,用ldap組織的信息會比簡單的表結構更加理想。
類型也規定了屬性查詢時的匹配規則、排序順序、大小寫敏感等。
1.5、對象類(ObjectClass)
對象類(ObjectClass)是屬性的集合,LDAP預想了很多人員組織機構中常見的對象,並將其封裝成對象類。比如人員(person)含有姓(sn)、名(cn)、電話(telephoneNumber)、密碼(userPassword)等屬性,單位職工(organizationalPerson)是人員(person)的繼承類,除了上述屬性之外還含有職務(title)、郵政編碼(postalCode)、通信地址(postalAddress)等屬性。
通過對象類可以方便的定義條目類型。每個條目可以直接繼承多個對象類,這樣就繼承了各種屬性。如果2個對象類中有相同的屬性,則條目繼承後只會保留1個屬性。對象類同時也規定了那些屬性是基本信息,必須含有(Must 活Required,必要屬性):哪些屬性是擴展信息,可以含有(May或Optional,可選屬性)。
對象類有三種類型:結構類型(Structural)、抽象類型(Abstract)和輔助類型(Auxiliary)。結構類型是最基本的類型,它規定了對象屍體的基本屬性,每個條目屬於且僅屬於一個結構型對象類。抽象類型可以是結構類型或其他抽象類型父類,它公國將對象屬性中共性的部分組織在一起,稱爲其他類的模板,條目不能直接集成抽象型對象類。輔助類型規定了對象實體的擴展屬性。雖然每個條米只屬於一個結構型對象類,但可以同時屬於多個輔助型對象類。
對象類本身是可以相互繼承的,所以對象類的根類是top抽象型對象類。以常用的人員類型爲例,他們的繼承關係如圖1-5-1:
圖1-5-1
如果將其中一支 top-->person-->organizationalPerson-->inetOrgPerson的必要屬性和可選屬性列表(表1-5-2),就會發現這種設計還是非常合理的。我們可以從任何一個對象派生出自己的對象類,比如organizationalPerson派生出職工(employee)對象類,那麼它可以含有工號(employeeNumber)、工種(employeeType)等屬性。注意,對象類繼承的時候會把屬性是必須(Must)還是可選(May)的特性也一併繼承。也就是說person有cn和sn兩個Must屬性,organizationalPerson和inetOrgPerson由於直接或間接繼承了person,也會有這兩個Must屬性。
表1-5-2
對象類 | 必要屬性(Required) | 可選屬性(Optional) | ||
top | objectClass | 無 | ||
person | cn | description | seeAlso | telephoneNumber |
sn | userPassword | |||
organizationalPerson | 無 | destinationIndicator | facsimileTelephoneNumber | internationalISDNNumber |
1 | ou | physicalDeliveryOfficeName | ||
postalAddress | postalCode | postOfficeBox | ||
preferredDeliveryMethod | registeredAddress | st | ||
street | teletexTerminalIdentifier | telexNumber | ||
title | x121Address |
對象類 | 必要屬性(Required) | 可選屬性(Optional) | ||
inetOrgPerson | audio | businessCategory | carLicense | |
departmentNumber | displayName | employNumber | ||
employeeType | givenName | homePhone | ||
homePostalAddress | initals | jpegPhoto | ||
labeledURL | manager | |||
mobile | o | pager | ||
photo | preferredLanguage | roomNumber | ||
secretary | uid | userCertificate | ||
userOKCS12 | userSMIMECertificate | x500UniqueIdentifier |
1.6、模式(Schema)
對象類(ObjectClass)、屬性類型(AttributeType)、語法(Syntax)分別約定了條目、屬性、值,他們之間的關係如下圖所示。所以這些構成了模式(Schema),模式中的每一個元素都有唯一的OID編號,如2.5.4.41.條目數據在導入時通常需要接受模式檢查,它確保了目錄中所有的條目數據結構都是一致的。