LDAP基礎概念
數據庫
1.一、LDAP目錄結構
數據結構
此圖爲樹形目錄結構,我將此跳過去了,由於這個是按照「國家這種結構來劃分的」。若是你喜歡這樣看更好,以下還有一種:ide
樹也能夠根據互聯網域名組主。這種命名方式正愈來愈受歡迎,由於它容許使用DNS爲目錄服務定位 。這個LDAP目錄樹中使用基於域的命名。比較適合個人應用場景(從域名-->部門-->我的)。post
1.二、條目(Entry)ui
條目(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組成,他們之間由加好隔開。spa
若是DN中含有一些特殊字符,好比:,=+<>;\",他們須要轉轉義符(\)來幫助表述。設計
1.三、屬性(Attribute)3d
每一個條目均可以有不少屬性(Attribute),好比常見的人都有姓名、地址、電話等屬性。每一個屬性都有名稱及對應的值,屬性值能夠有單個、多個。好比你有多個電話。orm
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.四、屬性類型(AttributeType)
每一個屬性都有惟一的屬性類型(AttributeType),屬性類型約定屬性值的數據格式和語法類型(Syntax)。好比,屬性cellPhone的類型爲telephoneNumber,它規定了電話號碼是由數字組成的,其中容許插入一些分隔符,如鏈接符、括號、空格等。
屬性類型也約定了屬性值是否能夠有多少個,多值屬性類型也可使人員信息的組織變得更加靈活並接近現實狀況,好比:人員的手機、地址、郵箱等屬性均可以有多個值。這樣,用ldap組織的信息會比簡單的表結構更加理想。
類型也規定了屬性查詢時的匹配規則、排序順序、大小寫敏感等。
1.五、對象類(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.六、模式(Schema)
對象類(ObjectClass)、屬性類型(AttributeType)、語法(Syntax)分別約定了條目、屬性、值,他們之間的關係以下圖所示。因此這些構成了模式(Schema),模式中的每個元素都有惟一的OID編號,如2.5.4.41.條目數據在導入時一般須要接受模式檢查,它確保了目錄中全部的條目數據結構都是一致的。