天天看點

ldap介紹 1. LDAP介紹 2. LDAP的特點 3. LDAP的基本模型

此文為copy,隻為簡單說明,源位址:http://windindream.blog.163.com/blog/static/49359192008311114717239/#_Toc195677486

1. LDAP介紹

1.1. LDAP是什麼

1.2. LDAP是電話簿

1.3. LDAP是不是資料庫

2. LDAP的特點

2.1. LDAP的優勢

2.1.1 跨平台

2.1.2 費用及維護

2.1.3 複制技術

2.1.4 允許使用ACI

2.2. LDAP存儲什麼資料

2.3. 什麼時候該用LDAP存儲資料

3. LDAP的基本模型

3.1 資訊模型:描述LDAP的資訊表示方式

3.2 命名模型:描述LDAP中的資料如何組織

3.3 功能模型:描述LDAP中的資料操作通路

3.4 安全模型:描述LDAP中的安全機制

3.4.1 身份認證

3.4.2 通訊安全

3.4.3 通路控制

LDAP是輕量目錄通路協定,英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是基于X.500标準的,但是簡單多了并且可以根據需要定制。與X.500不同,LDAP支援TCP/IP,這對通路Internet是必須的。LDAP的核心規範在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。

簡單說來,LDAP是一個得到關于人或者資源的集中、靜态資料的快速方式。

LDAP是一個用來釋出目錄資訊到許多不同資源的協定。通常它都作為一個集中的位址本使用,不過根據組織者的需要,它可以做得更加強大。

LDAP其實是一電話簿,類似于我們所使用諸如NIS(Network Information Service)、DNS (Domain Name Service)等網絡目錄,也類似于你在花園中所看到的樹木。

不少LDAP開發人員喜歡把LDAP與關系資料庫相比,認為是另一種的存貯方式,然後在讀性能上進行比較。實際上,這種對比的基礎是錯誤的。LDAP和關系資料庫是兩種不同層次的概念,後者是存貯方式(同一層次如網格資料庫,對象資料庫),前者是存貯模式和通路協定。LDAP是一個比關系資料庫抽象層次更高的存貯概念,與關系資料庫的查詢語言SQL屬同一級别。LDAP最基本的形式是一個連接配接資料庫的标準方式。該資料庫為讀查詢作了優化。是以它可以很快地得到查詢結果,不過在其它方面,例如更新,就慢得多。

從另一個意義上 LDAP是實作了指定的資料結構的存貯,它是一種特殊的資料庫。但是LDAP和一般的資料庫不同,明白這一點是很重要的。 LDAP對查詢進行了優化,與寫性能相比LDAP的讀性能要優秀很多。

就象Sybase、Oracle、Informix或Microsoft的資料庫管理系統(DBMS)是用于處理查詢和更新關系型資料庫那樣,LDAP伺服器也是用來處理查詢和更新LDAP目錄的。換句話來說LDAP目錄也是一種類型的資料庫,但不是關系型資料庫。要特别注意的是,LDAP通常作為一個hierarchal資料庫使用,而不是一個關系資料庫。是以,它的結構用樹來表示比用表格好。正因為這樣,就不能用SQL語句了。

LDAP最大的優勢是:可以在任何計算機平台上,用很容易獲得的而且數目不斷增加的LDAP的用戶端程式通路LDAP目錄。而且也很容易定制應用程式為它加上LDAP的支援。

LDAP協定是跨平台的和标準的協定,是以應用程式就不用為LDAP目錄放在什麼樣的伺服器上操心了。實際上,LDAP得到了業界的廣泛認可,因為它是Internet的标準。産商都很願意在産品中加入對LDAP的支援,因為他們根本不用考慮另一端(用戶端或服務端)是怎麼樣的。LDAP伺服器可以是任何一個開發源代碼或商用的LDAP目錄伺服器(或者還可能是具有LDAP界面的關系型資料庫),因為可以用同樣的協定、用戶端連接配接軟體包和查詢指令與LDAP伺服器進行互動。與LDAP不同的是,如果軟體産商想在軟體産品中內建對DBMS的支援,那麼通常都要對每一個資料庫伺服器單獨定制。

不象很多商用的關系型資料庫,你不必為LDAP的每一個用戶端連接配接或許可協定付費。

大多數的LDAP伺服器安裝起來很簡單,也容易維護和優化。

LDAP伺服器可以用"推"或"拉"的方法複制部分或全部資料,例如:可以把資料"推"到遠端的辦公室,以增加資料的安全性。複制技術是内置在LDAP伺服器中的而且很容易配置。如果要在DBMS中使用相同的複制功能,資料庫産商就會要你支付額外的費用,而且也很難管理。

LDAP允許你根據需要使用ACI(一般都稱為ACL或者通路控制清單)控制對資料讀和寫的權限。例如,裝置管理者可以有權改變員工的工作地點和辦公室号碼,但是不允許改變記錄中其它的域。ACI可以根據誰通路資料、通路什麼資料、資料存在什麼地方以及其它對資料進行通路控制。因為這些都是由LDAP目錄伺服器完成的,是以不用擔心在用戶端的應用程式上是否要進行安全檢查。

LDAP對于這樣存儲這樣的資訊最為有用:也就是資料需要從不同的地點讀取,但是不需要經常更新。例如,這些資訊存儲在LDAP目錄中是十分有效的:

l 公司員工的電話号碼簿群組織結構圖

l 客戶的聯系資訊

l 計算機管理需要的資訊,包括NIS映射、email假名,等等

l 軟體包的配置資訊

l 公用證書和安全密匙

大多數的LDAP伺服器都為讀密集型的操作進行專門的優化。是以,當從LDAP伺服器中讀取資料的時候會比從專門為OLTP優化的關系型資料庫中讀取資料快一個數量級。也是因為專門為讀的性能進行優化,大多數的LDAP目錄伺服器并不适合存儲需要經常改變的資料。例如,用LDAP伺服器來存儲電話号碼是一個很好的選擇,但是它不能作為電子商務站點的資料庫伺服器。

如果下面每一個問題的答案都是"是",那麼把資料存在LDAP中就是一個好主意。

l 需要在任何平台上都能讀取資料嗎?

l 每一個單獨的記錄項是不是每一天都隻有很少的改變?

l 可以把資料存在平面資料庫(flat database)而不是關系型資料庫中嗎?換句話來說,也就是不管什麼範式不範式的,把所有東西都存在一個記錄中(差不多隻要滿足第一範式)。

最後一個問題可能會唬住一些人,其實用平面資料庫去存儲一些關系型的資料也是很一般的。例如,一條公司員工的記錄就可以包含經理的登入名。用LDAP來存儲這類資訊是很友善的。一個簡單的判斷方法:如果可以把保資料存在一張張的卡片裡,就可以很容易地把它存在LDAP目錄裡。

在LDAP中資訊以樹狀方式組織,在樹狀資訊中的基本資料單元是條目,而每個條目由屬性構成,屬性中存儲有屬性值;LDAP中的資訊模式,類似于面向對象的概念,在LDAP中每個條目必須屬于某個或多個對象類(Object Class),每個Object Class由多個屬性類型組成,每個屬性類型有所對應的文法和比對規則;對象類和屬性類型的定義均可以使用繼承的概念。每個條目建立時,必須定義所屬的對象類,必須提供對象類中的必選屬性類型的屬性值,在LDAP中一個屬性類型可以對應多個值。

在LDAP中把對象類、屬性類型、文法和比對規則統稱為Schema(圖表),在LDAP中有許多系統對象類、屬性類型、文法和比對規則,這些系統Schema在LDAP标準中進行了規定,同時不同的應用領域也定義了自己的Schema,同時使用者在應用時,也可以根據需要自定義Schema。這有些類似于XML,除了XML标準中的XML定義外,每個行業都有自己标準的DTD或DOM定義,使用者也可以自擴充;也如同XML,在LDAP中也鼓勵使用者盡量使用标準的Schema,以增強資訊的互聯互通。

在Schema中最難了解的是比對規則,這是LDAP中為了加快查詢的速度,針對不同的資料類型,可以提供不同的比對方法,如針對字元串類型的相等、模糊、大于小于均提供自己的比對規則。

LDAP中的命名模型,也即LDAP中的條目定位方式。在LDAP中每個條目均有自己的DN和RDN。DN是該條目在整個樹中的唯一名稱辨別,RDN是條目在父節點下的唯一名稱辨別,如同檔案系統中,帶路徑的檔案名就是DN,檔案名就是RDN。

在LDAP中共有四類10種操作:查詢類操作,如搜尋、比較;更新類操作,如添加條目、删除條目、修改條目、修改條目名;認證類操作,如綁定、解綁定;其它操作,如放棄和擴充操作。除了擴充操作,另外9種是LDAP的标準操作;擴充操作是LDAP中為了增加新的功能,提供的一種标準的擴充架構,目前已經成為LDAP标準的擴充操作,有修改密碼和StartTLS擴充,在新的RFC标準和草案中正在增加一些新的擴充操作,不同的LDAP廠商也均定義了自己的擴充操作。

LDAP中的安全模型主要通過身份認證、安全通道和通路控制來實作。

在LDAP中提供三種認證機制,即匿名、基本認證和SASL(Simple Authentication and Secure Layer)認證。匿名認證即不對使用者進行認證,該方法僅對完全公開的方式适用;基本認證均是通過使用者名和密碼進行身份識别,又分為簡單密碼和摘要密碼認證;SASL認證即LDAP提供的在SSL和TLS安全通道基礎上進行的身份認證,包括數字證書的認證。

在LDAP中提供了基于SSL/TLS的通訊安全保障。SSL/TLS是基于PKI資訊安全技術,是目前Internet上廣泛采用的安全服務。LDAP通過StartTLS方式啟動TLS服務,可以提供通訊中的資料保密性、完整性保護;通過強制用戶端證書認證的TLS服務,同時可以實作對用戶端身份和伺服器端身份的雙向驗證。

雖然LDAP目前并無通路控制的标準,但從一些草案中或是事實上LDAP産品的通路控制情況,我們不難看出:LDAP通路控制異常的靈活和豐富,在LDAP中是基于通路控制政策語句來實作通路控制的,這不同于現有的關系型資料庫系統和應用系統,它是通過基于通路控制清單來實作的,無論是基于組模式或角色模式,都擺脫不了這種限制。

在使用關系型資料庫系統開發應用時,往往是通過幾個固定的資料庫使用者名通路資料庫。對于應用系統本身的通路控制,通常是需要建立專門的使用者表,在應用系統内開發針對不同使用者的通路控制授權代碼,這樣一旦通路控制政策變更時,往往需要代碼進行變更。總之一句話,關系型資料庫的應用中使用者資料管理和資料庫通路辨別是分離的,複雜的資料通路控制需要通過應用來實作。

而對于LDAP,使用者資料管理和通路辨別是一體的,應用不需要關心通路控制的實作。這是由于在LDAP中的通路控制語句是基于政策語句來實作的,無論是通路控制的資料對象,還是通路控制的主體對象,均是與這些對象在樹中的位置和對象本身的資料特征相關。

在LDAP中,可以把整個目錄、目錄的子樹、制定條目、特定條目屬性集或符合某過濾條件的條目作為控制對象進行授權;可以把特定使用者、屬于特定組或所有目錄使用者作為授權主體進行授權;最後,還可以定義對特定位置(例如IP位址或DNS名稱)的通路權。

本文轉自 陳延宗 51CTO部落格,原文連結:http://blog.51cto.com/407711169/1439543,如需轉載請自行聯系原作者