LDAP總結:仿冒+改良=創新
一, LDAP 概念
LDAP(Lightweight Directory Access Protocol),輕量級目錄訪問協議。它是目錄訪問協議的一個標準。它是基於X.500 標準的,可以根據需要定製。輕量級目錄訪問協議以信息目錄的形式存在,在該目錄中可只定義一次用戶和組,而在多臺機器和多個應用程序間共享它們。
目錄服務是一種特殊的數據庫系統,其專門針對讀取,瀏覽和搜索操作進行了特定的優化。目錄一般用來包含描述性的,基於屬性的信息並支持精細複雜的過濾能力。目錄一般不支持通用數據庫針對大量更新操作操作需要的複雜的事務管理或回捲策略。而目錄服務的更新則一般都非常簡單。這種目錄可以存儲包括個人信息、web鏈結、jpeg圖像等各種信息。爲了訪問存儲在目錄中的信息,就需要使用運行在TCP/IP 之上的訪問協議—LDAP。
二, LDAP 組織結構
LDAP目錄中的信息是是按照樹型結構組織,具體信息存儲在條目(entry)的數據結構中。
條目相當於關係數據庫中表的記錄;條目是具有區別名DN (Distinguished Name)的屬性(Attribute):
DN是用來引用條目的,DN相當於關係數據庫表中的關鍵字(Primary Key)。
屬性由類型(Type)和一個或多個值(Values)組成,相當於關係數據庫中的字段(Field)由字段名和數據類型組成,只是爲了方便檢索的需要,LDAP中的Type可以有多個Value,而不是關係數據庫中爲降低數據的冗餘性要求實現的各個域必須是不相關的。
LDAP中條目的組織一般按照地理位置和組織關係進行組織,非常的直觀。LDAP把數據存放在文件中,爲提高效率可以使用基於索引的文件數據庫,而不是關係數據庫。類型的一個例子就是mail,其值將是一個電子郵件地址。
LDAP的信息是以樹型結構存儲的,在樹根一般定義國家(c=CN)或域名(dc=com),在其下則往往定義一個或多個組織(organization)(o=Acme)或組織單元(organizationalunits) (ou=People)。一個組織單元可能包含諸如所有僱員、大樓內的所有打印機等信息。
此外,LDAP支持對條目能夠和必須支持哪些屬性進行控制,這是有一個特殊的稱爲對象類別(objectClass)的屬性來實現的。該屬性的值決定了該條目必須遵循的一些規則,其規定了該條目能夠及至少應該包含哪些屬性。例如:inetorgPerson對象類需要支持sn(surname)和cn(commonname)屬性,但也可以包含可選的如郵件,電話號碼等屬性。
例如: dn: cn=Jason H. Smith,ou=Managers,o=Acme,c=US
理解:dn是引用的條目,cn指必須實現的屬性(cn: Jason H. Smith;sn: Smith 二者都是必需實現的),ou指組織單元,c指的是樹根。
三,LDAP 目錄設計
設計目錄結構是LDAP最重要的方面之一。下面我們將通過一個簡單的例子來說明如何設計合理的目錄結構。該例子將通過Netscape地址薄來訪文。假設有一個位於美國US(c=US)而且跨越多個州的名爲Acme(o=Acme)的公司。Acme希望爲所有的僱員實現一個小型的地址薄服務器。
我們從一個簡單的組織DN開始:
dn: o=Acme, c=US
Acme所有的組織分類和屬性將存儲在該DN之下,這個DN在該存儲在該服務器的目錄是唯一的。Acme希望將其僱員的信息分爲兩類:管理者(ou= Managers)和普通僱員(ou=Employees),這種分類產生的相對區別名(RDN,relativedistinguished names。表示相對於頂點DN)就是:
dn: ou=Managers, o=Acme,c=US
dn: ou=Employees, o=Acme,c=US
在下面我們將會看到分層結構的組成:頂點是US的Acme,下面是管理者組織單元和僱員組織單元。因此包括Managers和Employees的DN組成爲:
dn: cn=Jason H. Smith,ou=Managers, o=Acme, c=US
dn: cn=Ray D. Jones,ou=Employees, o=Acme, c=US
dn: cn=Eric S. Woods,ou=Employees, o=Acme, c=US
爲了引用Jason H. Smith的通用名(common name )條目,LDAP將採用cn=Jason H. Smith的RDN。然後將前面的父條目結合在一起就形成如下的樹型結構:
cn=Jason H. Smith
+ ou=Managers
+o=Acme
+ c=US
->dn: cn=Jason H. Smith,ou=Managers,o=Acme,c=US
現在已經定義好了目錄結構,下一步就需要導入目錄信息數據。目錄信息數據將被存放在LDIF文件中,其是導入目錄信息數據的默認存放文件。用戶可以方便的編寫Perl腳本,來從例如/etc/passwd、NIS等系統文件中自動創建LDIF文件。
下面的實例保存目錄信息數據爲testdate.ldif文件,該文件的格式說明將可以在man ldif中得到。
在添加任何組織單元以前,必須首先定義Acme DN:
dn: o=Acme, c=US
objectClass: organization
這裏o屬性是必須的
o: Acme
下面是管理組單元的DN,在添加任何管理者信息以前,必須先定義該條目。
dn: ou=Managers, o=Acme,c=US
objectClass:organizationalUnit
這裏ou屬性是必須的。
ou: Managers
第一個管理者DN:
dn: cn=Jason H. Smith,ou=Managers, o=Acme, c=US
objectClass: inetOrgPerson
cn和sn都是必須的屬性:
cn: Jason H. Smith
sn: Smith
但是還可以定義一些可選的屬性:
telephoneNumber:111-222-9999
mail: [email protected]
localityName: Houston
四,LDAP和數據庫
嚴格意義上說,LDAP根本不是數據庫而是用來訪問存儲在信息目錄(也就是LDAP目錄)中的信息的協議。
LDAP和關係數據庫是兩種不同層次的概念,後者是存貯方式(同一層次如網格數據庫,對象數據庫),前者是存貯模式和訪問協議。LDAP是一個比關係數據庫抽象層次更高的存貯概念,與關係數據庫的查詢語言SQL屬同一級別。LDAP最基本的形式是一個連接數據庫的標準方式。該數據庫爲讀查詢作了優化。因此它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。
LDAP目錄也是一種類型的數據庫,但是不是關係型數據庫。不象被設計成每分鐘需要處理成百上千條數據變化的數據庫,例如:在電子商務中經常用到的在線交易處理(OLTP)系統,LDAP主要是優化數據讀取的性能。
目錄是特殊化的數據庫, 有着與傳統意義上的關係數據庫不同的特徵:
(1)用戶訪問目錄通常比更新目錄多得多,目錄適合存儲相對靜態的信息。
(2)目錄不支持事務機制
(3)信息訪問機制不同:
大多數關係數據庫支持標準化的sql訪問方式,而LDAP目錄的訪問使用簡單的而又優化的訪問方式。
五,附錄
(1)常見的目錄服務軟件
· X.500
· LDAP
· ActriveDirectory,Microsoft公司
· NIS
(2)X.500
X.500是一套已經被國際標準化組織(ISO)接受的目錄服務系統標準,它定義了一個機構如何在全局範圍內共享其名字和與之相關的對象。X.500是層次性的,其中的管理域(機構、分支、部門和工作組)可以提供這些域內的用戶和資源信息。在PKI體系中,X.500被用來唯一標識一個實體,該實體可以是機構、組織、個人或一臺服務器。X.500被認爲是實現目錄服務的最佳途徑,但X.500的實現投資較大,並且比其他方式速度慢,而其優勢具有信息模型、多功能和開放性。
X.500目錄服務是一個高度複雜的信息存儲機制,包括客戶機-目錄服務器訪問協議、服務器-服務器通信協議、完全或部分的目錄數據複製、服務器鏈對查詢的響應、複雜搜尋的過濾功能等。
在X.500目錄結構中,客戶機查詢並接收來自服務器目錄服務中的一臺或多臺服務器上的響應,目錄訪問協議(DAP)控制服務器和客戶機之間的通信。
目錄系統代理(DSA,Directory System Agent)是指一種用於存儲目錄信息的數據庫。該數據庫採用分層格式,提供快速而高效的搜索功能。DSA與目錄信息樹(DIT,Directory Information Tree)相連接。目錄用戶代理(DUA,Directory User Agent)是用於訪問一個或多個DSA的用戶接口程序。DUA包括whois、查找器(finger),以及提供圖形用戶界面的相關程序等。
目錄系統協議(DSP,Directory System Protocol)主要控制兩個或多個目錄系統代理、目錄用戶代理和目錄系統代理間的交互操作。具體實現過程是:終端用戶在不知道某特定信息具體位置的情況下,就可以訪問目錄中的信息。
X.500 主要具備以下特徵:
分散維護(Decentralized Maintenance):運行X.500的每個站點只負責其本地目錄部分,所以可以立即進行更新和維護操作。
強大的搜索性能:X.500提供強大的搜索功能,支持用戶建立的任意複雜查詢。
單一全局命名空間(Single Global Namespace):類似於DNS,X.500爲用戶提供單一的相同命名空間(Single HomegeneousNamespace)。與DNS相比,X.500的命名空間更靈活且易於擴展。
結構化信息結構(Structured InformationFramework):X.500目錄中定義了信息結構,允許本地擴展。
基於標準的目錄服務(Standards-Based DirectoryService):由於X.500可以被用於建立一個基於標準的目錄,那麼在某種意義上,請求應用目錄信息(電子郵件、資源自動分配器、特定目錄工具)的應用程序就能訪問重要且有價值的信息。
由於X.500的實施太過於複雜而受到異議,爲解決這個問題,後來有人推出了一種較爲簡單的基於TCP/IP的DAP新版本,即輕量級目錄訪問協議(LDAP,Lightweight DirectoryAccess Protocol),主要用於Internet。LDAP與DAP具有很多類似的基本功能,另外它還能用來查詢私有目錄和開放X.500目錄上的數據。在過去的幾年裏,大多數主要的電子郵件和目錄服務軟件供應商都對LDAP表現出了極大的興趣,LDAP已迅速發展成爲Internet上事實的目錄協議標準。
參考:
http://www.cnblogs.com/obpm/archive/2010/08/28/1811065.html
http://blog.sina.com.cn/s/blog_6151984a0100ey3z.html