2015年9月27日 星期日

解析LDAP資料結構

首先要理解的三層概念是:Schemaobjectclassattribute

Schema
就是objectclass的集合,透過把集合相同性質的類別,可以完整描述現實中的個體的資訊。
需要注意的是,同樣的attribute雖然在甲這個Schema使用了,不過Schema乙也可以擁有這個attribute定義在其中。
與objectclass、attribute的關係,可以參考下圖

objectclass
就是一群attribute的集合。
每一種objectclass都會定義其中哪些attribute是必要的,而哪些是可選的
objectclass具有繼承的關係,若甲繼承乙,則甲擁有乙所有的屬性,例如可以使用哪些attribute,以及哪些attribute是必要的。
objectclass具有結構性,就功能上區分為兩種:

  • 有的objectclass只是輔助用的,可以當作插件輔助描述一筆資料。
  • 而有的objectclass則是抽象的,亦即是不存在的類別,可以被繼承後實作,最廣泛使用的抽象類別是top,被所有objectclass繼承且在繼承關係中的最高位置
在繼承鏈中,輔助型只能繼承輔助的objectclass,抽象型亦同

attribute
描述資料的內容。
一種attribute可以被include在一個objectclass,也可以在多個不同的objectclass中都含有這個arrtibute
在一個entry內使用某個attribute描述資訊時,擁有該attribute的objectclass也必須在entry裡被使用,而使用的Schema也必須含有這個objectclass
在一個entry中,一個attribute可以被使用一次,也可以多次,
換句話說就是這筆entry的這個attribute可以是單一值或是多個值(比如你的Email或是配偶不會只有一個)
attribute也同樣擁有繼承關係,例如commonName(cn), givenName (gn), surname(sn)就是繼承了Name
每個attribute的內容資料型態都有定義過,例如只能存數字或是字串

entry
就是LDAP資料樹的節點的意思
一個entry只能使用一種結構性的objectclass,但是可以使用無數種輔助型的objectclass
其他特性就跟樹狀節點一樣,跟自己同一層的叫做sibling,上層節點稱為parent,反之稱為child

關於Schema、objectclass、attribute跟entry的關係,可以用下方這張圖表示:

參考資料:
LDAP Schemas, objectClasses and Attributes