許多在網路上的執行程式,都需要相關使用者的資訊,因此在維護多個系統同步化的考量上,有效的儲存與管理這些資訊,儼然變成企業E化過程中一個最重要的環節。
目錄服務的簡介
在了解目錄服務之前,我們必須先了解什麼是「命名服務」。所謂的命名服務(Naming Service)就是把一個資訊或資源,利用一個唯一的名稱來產生關聯的服務,例如常見的域名解析(Domain Name Server,DNS)就類似命名服務;它是將一個IP搭配一個域名(Domain Name)來作為唯一的關聯,除非有人去更改設定,不然Domain Name都只會指向同一個IP,而命名服務的目的也是一樣。
在了解命名服務後,就可以談目錄服務了。目錄服務是指一群有著相同屬性資料的列表,舉例來說,電話簿就是一種目錄服務,也就是俗稱的黃皮書。電話簿通常都是以規則性的方式將資料儲存成列表,並提供索引的功能,以便讓使用者能夠進行快速的資料查詢,如查詢電話或地址。而為了要讓電腦系統也擁有查詢和索引的功能,於是便設計出目錄服務的技術。
目錄服務可讓使用者在網路上快速擷取資訊,它們針對經常讀取且很少寫入的資料作最佳化,而所有的目錄服務都一定含有一個命名服務。因為目錄服務是建立在命名服務之上,命名服務又是建立在物件之上,所以目錄服務除了擁有命名服務的功能外,還提供了查詢物件,並且讓物件與屬性產生關聯。
目錄服務在於提供使用者查詢資料的時候,可由一些基本的關鍵字來進行資料的查詢。舉例來說,我們可以從電話簿裡,直接依照姓名或資料的名稱來進行查詢。而在電腦的系統上,當然也可以提供相關的關鍵字,例如使用找可以直接以印表機的名稱查到該印表機的相關資料。
假設使用者無法提供關鍵字,當然也可以透過分類的方式進行查詢,舉例來說,使用者要查詢一家位於自己住家附近的五金行時,事先並不知道名稱,所以這時可以透過電話簿的五金行分類中,找到一家在自己住家附近的五金行,電腦上的目錄服務也是如此。不過這比起傳統的目錄服務來說,又更為有彈性,因為在電腦上,使用者不僅可以用分類來進行資料查詢,也可以透過一些特別的資料屬性來進行查詢。
成為目錄服務代名詞的LDAP
Lightweight Directory Access Protocal(LDAP)這個名詞目前用來作為目錄服務的標準,或就代表了目錄服務本身。在LDAP獨立運作之前,目錄服務的標準為X.500,並且它定義了一組相當全面性的目錄架構。不過由於X.500在實作上非常困難,加上它本身是使用Open System Interconnection(OSI)OSI網路協定堆疊,所以並沒有被廣泛的部署;再者也因為廠商的不支援,漸漸地被網路業界淘汰。
而原本是扮演中介角色的LDAP,在一次又一次的發展後,逐漸成為可以獨立運作的版本。並且它又是透過TCP/IP傳輸協定,因此它可以被設計在任何傳輸協定上執行。此外它也擁有許多異質目錄服務介面的能力,這也造成了LDAP不但代替了X.500的功能,甚至還擴充了許多其它的功能,如Simple Authetication and Security Layer(SASL)等。
LDAP的資料結構
LDAP的資料儲存方式是將資料依樹的的型式儲存,並由一個個的Entry構成一個完整的資料目錄樹(Directory Information Tree,DIT)。每個Entry可以想像成是關聯式資料庫的橫列(Row),裡面存放著使用者的資料,在最頂層的資料被稱為Suffix。而每個Entry都會有一個Distinguished Name(DN),這個DN是由命名服務轉換而來,並且由數個元件組成,作為一個其物件唯一的識別,例如DN:cn = Maggie、ou = HR、o = IBM、c = TW。
每一個DN元件的命名,會與上層的Relative Distinguished Name(RDN)有關係。在剛剛所舉的例子裡,ou = HR、o = IBM、c = TW便是該DN元件的RDN。此外其他的元素,如c = Country(國家)、o = Organization(組織)等,都有其固定的意義,因此利用這些元素便可以建構出一個獨一無二的DN。
Entry是儲存資料的地方,一個Entry是由許多屬性組合起來,而每個屬性都是由一個Type與一個數值(Value)組成,這就有如一筆關聯式資料庫的Row的資料一樣;一筆Row裡面有許多的Column,而每個Column則都會有一個型態(Type)和一個數值(Value)存在。
@大標:其他的LDAP議題
LDAP Data Interchange Format
LDAP Data Interchange Format(LDIF)是一個簡單的ASCII格式,專門用來表示LDAP資料,並使LDAP伺服器間的資料交換更為方便,下列是一個LDIF的範例:
dn: cn=Sam,ou=People
objectclass: top
objectclass: person
objectclass: ePerson
cn: Sam
mobile: 0939123456
mail: guest@mail.com
複製(Replication)
為了方便資料的複製與同步化,LDAP在制定為標準前,就先把這樣的規範給考量進去。透過Replication的方式,不但能改善本地主機對於中央資料的存取,也可以藉由負載平衡(Load Balance)等技術來增加LDAP 伺服器的可靠性。
參照(Referral)
Referral是一個指標,它允許LDAP伺服器連結在一起,使得資料不必全部座落於同一台LDAP伺服器上,而達到資料共享的目的。
結語
LDAP簡單的說是可以快速地提供使用者與資源的資訊存取,且是完全為一個分散式的網路環境所設計的一個標準。LDAP也可以透過Sun的JNDI API進行資料存取,不過不論使用者正在使用的是哪一種平台,LDAP在運用方面都是相當容易的技術。伴隨著良好的應用程式設計,LDAP可以滿足各式各樣的商業需求,並且能充分的回報學習它所花下的時間與努力。
<本文轉載自IBM developerWorks官方網站,程裕翔 整理>