天天看點

【轉】LDAP介紹

1. LDAP能做什麼

大多數的LDAP伺服器都為讀密集型的操作進行專門的優化。是以,當從LDAP伺服器中讀取資料的時候會比從專門為OLTP優化的關系型資料庫中讀取資料快一個數量級。也是因為專門為讀的性能進行優化,大多數的LDAP目錄伺服器并不适合存儲需要需要經常改變的資料。它主要面向資料的查詢服務(查詢和修改操作比一般是大于10:1),不提供事務的復原(rollback)機制,它的資料修改使用簡單的鎖定機制實作All-or-Nothing,它的目标是快速響應和大容量查詢并且提供多目錄伺服器的資訊複制功能。例如,用LDAP伺服器來存儲電話号碼是一個很好的選擇,但是它不能作為電子商務站點的資料庫伺服器。如果下面每一個問題的答案都是“是”,那麼把資料存在LDAP中就是一個好主意。 

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

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

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

2. LDAP具有安全和通路控制

LDAP提供很複雜的不同層次的通路控制或者ACI。因這些通路可以在伺服器端控制,這比用用戶端的軟體保證資料的安全可安全多了。用LDAP的ACI,可以完成: 

l 給予使用者改變他們自己的電話号碼和家庭位址的權限,但是限制他們對其它資料(如,職務名稱,經理的登入名,等等)隻有“隻讀”權限。 

l 給予“HR-admins"組中的所有人權限以改變下面這些使用者的資訊:經理、工作名稱、員工号、部門名稱和部門号。但是對其它域沒有寫權限。 

l 禁止任何人查詢LDAP伺服器上的使用者密碼,但是可以允許使用者改變他或她自己的密碼。 

l 給予經理通路他們上級的家庭電話的隻讀權限,但是禁止其他人有這個權限。 

l 給予“host-admins"組中的任何人建立、删除和編輯所有儲存在LDAP伺服器中的與計算機主機有關的資訊 

l 通過Web,允許“foobar-sales"組中的成員有選擇地給予或禁止他們自己讀取一部分客戶聯系資料的讀權限。這将允許他們把客戶聯系資訊下載下傳到本地的筆記本電腦或個人數字助理(PDA)上。(如果銷售人員的軟體都支援LDAP,這将非常有用) 

l 通過Web,允許組的所有者删除或添加他們擁有的組的成員。例如:可以允許銷售經理給予或禁止銷售人員改變Web

頁的權限。也可以允許郵件假名(mail aliase)的所有者不經過IT技術人員就直接從郵件假名中删除或添加使用者。 “公用”的郵件清單應該允許使用者從郵件假名中添加或删除自己(但是隻能是自己)。也可以對IP位址或主機名加以限制。例如,某些域隻允許使用者IP位址以192.168.200.*開頭的有讀的權限,或者使用者反向查找DNS得到的主機名必須為*.foobar.com。

3. 目錄服務系統的組成

目錄服務系統一般由兩部分組成:第一部分是資料庫,一種分布式的資料庫,且擁有一個描述資料的規劃;第二部分則是通路和處理資料庫有關的詳細的通路協定。

目錄服務與關系型資料庫不同的是,目錄不支援批量更新所需要的事務處理功能,目錄一般隻執行簡單的更新操作,适合于進行大量資料的檢索;目錄具有廣泛複制資訊的能力,進而在縮短響應時間的同時,提高了可用性和可靠性。目前,目錄服務技術的國際标準有兩個,即較早的X.500标準和近年迅速發展的LDAP标準。

3.1 X.500是一個協定族

  X.500實際上不是一個協定,它是由一個協定族組成:X.501模型強調目錄服務基本模型和概念;X.509認證架構是如何在 X.500中處理目錄客戶和伺服器的認證;X.511 抽象服務定義X.500被要求提供的功能性服務;X.518 分布式操作過程表明如何跨越多台伺服器處理目錄服務;X.519 協定規範即是X.500協定,包括目錄通路協定DAP、目錄系統協定DSP、目錄操作綁定協定DOP和目錄資訊Shadowing協定DISP; X.520 標明的屬性類型要求是X.500自己使用的屬性類型;X.521標明的對象類即為X.500自己使用的對象類;X.525複制是如何在目錄伺服器之間複制目錄内容。

  在這些X.500标準中主要定義有多種内容。一個資訊模型:确定目錄中資訊的格式和字元集,如何在項中表示目錄資訊(定義對象類、屬性等模式);一個命名空間:确定對資訊進行的組織和引用,如何組織和命名項——目錄資訊樹DIT和層次命名模型;一個功能模型:确定可以在資訊上執行的操作;一個認證架構:保證目錄中資訊的安全,如何實作目錄中資訊的授權保護——通路控制模型;一個分布操作模型:确定資料如何進行分布和如何對分布資料執行操作,如何将全局目錄樹劃分為管理域進行管理——目錄管理模型,用戶端與伺服器通信的協定—目錄通路協定DAP,将使用者請求在伺服器之間進行連結所需的目錄系統協定DSP,将標明的資訊在伺服器之間進行複制所需的目錄資訊映像協定DISP,用于自動在伺服器之間協商連接配接配置的目錄操作綁定協定DOP。

  X.500雖然是一個完整的目錄服務協定,但在實際應用的過程中,卻存在着不少障礙。由于目錄通路協定DAP這種應用層協定是嚴格遵照複雜的ISO七層協定模型制定的,對相關層協定環境要求過多,主要運作在UNIX機器上,在許多小系統上,如PC和Macintosh上無法使用,是以沒有多少人按照DAP開發應用程式,TCP/IP協定體系的普及,更使得這種協定越來越不适應需要。

3.2 LDAP目錄通路标準

  LDAP協定從1993年準許,産生了LDAP V1版本,随後于1997年釋出了第三個版本LDAP V3,它的出現是LDAP協定發展的一個裡程碑性标志,它使LDAP協定不僅僅作為X.500的簡化版,同時提供了LDAP協定許多自有的特性,使 LDAP協定功能更為完備,具有了更大的生命力。

  LDAP V3協定也不是一個協定,而是一個協定族。RFC 2251——LDAP V3核心協定,定義了LDAP V3協定的基本模型和基本操作;RFC 2252——定義了LDAP V3中的基本資料模式(Schema)(包括文法、比對規則、屬性類型和對象類)以及标準的系統資料模式;RFC 2253——定義了LDAP V3中的分辨名(DN)表達方式;RFC 2254——定義了LDAP V3中的過濾器的表達方式;RFC 2255——LDAP統一資源位址的格式;RFC 2256——在LDAP V3中使用X.500的Schema清單;RFC 2829——定義了LDAP V3中的認證方式;RFC 2830——定義了如何通過擴充使用TLS服務;RFC 1823——定義了C的LDAP用戶端API開發接口;RFC 2847——定義了LDAP資料導入、導出檔案接口LDIF。

  在這些協定中,主要定義了LDAP的内容,同時主要定義了一個資訊模型:确定LDAP目錄中資訊的格式和字元集,如何表示目錄資訊 (定義對象類、屬性、比對規則和文法等模式);一個命名空間:确定對資訊進行的組織方式——目錄資訊樹DIT,以DN和RDN為基礎的命名方式,以及 LDAP資訊的Internet表示方式;一個功能模型:确定可以在資訊上執行的操作的通訊協定以及在用戶端進行這些操作的API接口;一個安全架構:保證目錄中資訊的安全,匿名、使用者名/密碼、SASL等多種認證方式,以及與TLS結合的通訊保護架構;一個分布式操作模型:基于Referral方式的分布式操作架構;一個LDAP擴充架構:基于控制和擴充操作的LDAP擴充架構 。

  但在LDAP協定中尚未定義通用的通路控制模型和複制協定(對應X.500的映射協定DISP),盡管不同的LDAP廠商均實作了自己的控制模型和複制機制,但是LDAP标準的發展正集中在通路控制模型、複制協定(DUP)以及擴充操作上,這些擴充操作包括查詢的分頁和排序、語言标簽、動态目錄、LDAP服務發現等。

4. X.500與LDAP的比較分析

從目錄服務技術的發展來看,LDAP标準實際上是在X.500标準基礎上産生的一個簡化版本,兩者之間的關系與那種為解決同一個問題出現的兩個獨立發展的技術有很大的不同之處,是以需要在此基礎上對這兩個标準進行了解和分析。

  首先,作為IETF(Internet Engineering Task Force)一個正式的标準,LDAP是X.500标準中的目錄通路協定DAP的一個子集,可用于建立X.500目錄。是以這兩個目錄服務技術标準有着許多的共同之處,即在平台上,都實作了一個通用的平台結構,提供了一個作業系統和應用程式需要的資訊服務類型,可以被許多平台和應用程式接收和實作;在資訊模型上,都使用了項、對象類、屬性等概念和模式來描述資訊;在命名空間方面,都使用了目錄資訊樹結構和層次命名模型;在功能模型上,都使用了相似的操作指令來管理目錄資訊;在認證架構方面,都可以實作使用者名稱和密碼,或者基于安全加密方式的認證機制;在靈活性上,它們的目錄規模都可大可小,大到全球目錄樹,小到隻有一台目錄伺服器;在分布性方面,目錄資訊都可以分布在多個目錄伺服器中,這些伺服器可以由各組織管理,既保證了目錄資訊總體結構一緻性,又滿足了分級管理的需要。

  LDAP與X.500的DAP相同之處是,LDAP也是被設計用來從分層目錄中提取資訊。但與之不同的是,為保持網絡的帶寬, LDAP對來自X.500目錄詢問的應答次數加以限制。最初LDAP隻是一種通路X.500目錄的簡單方法,是X.500的功能子集,但随着它的成熟和獨立發展,已經增加了許多在X.500中沒有的新特性。現在的LDAP既可以為X.500目錄服務提供一個輕型前端,也可以實作一個獨立的目錄服務。

LDAP的獨特之處

  首先,AP(Access Protocol)既是一個X.500的通路協定,又是一個靈活的可以獨立實作的目錄系統。

  其次,DAP(Directory Access Protocol)基于Internet協定,X.500基于OSI(開放式系統互聯)協定:建立在應用層上的X.500 目錄通路協定DAP,需要在OSI會話層和表示層上進行許多的建立連接配接和包處理的任務,需要特殊的網絡軟體實作對網絡的通路;LDAP則直接運作在更簡單和更通用的TCP/IP或其它可靠的傳輸協定層上,避免了在OSI會話和表示層的開銷,使連接配接的建立和包的處理更簡單、更快,對于網際網路和企業網應用更理想。

  再者,LDAP協定更為簡單:LDAP繼承了X.500最好的特性,同時去掉了它的複雜性。LDAP通過使用查找操作實作清單操作和讀操作,另一方面省去了X.500中深奧的和很少使用的服務控制和安全特性,隻保留常用的特性,簡化了LDAP的實作。

  其它,LDAP通過引用機制實作分布式通路:X.500 DSA通過伺服器之間的鍊操作實作分布式的通路,這樣查詢的壓力集中于伺服器端;而LDAP通過用戶端API實作分布式操作(對于應用透明)平衡了負載;

  最後,LDAP實作具有低費用、易配置和易管理的特點。經過性能測試,LDAP比X.500具有更少的響應時間;LDAP提供了滿足應用程式對目錄服務所需求的特性。

(http://www.fanqiang.com)

5. LDAP四種基本模型

5.1 資訊模型:描述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中為了加快查詢的速度,針對不同的資料類型,可以提供不同的比對方法,如針對字元串類型的相等、模糊、大于小于均提供自己的比對規則。

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

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

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

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

5.4 安全模型:描述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名稱)的通路權。

6. LDAP的應用

由于LDAP所具有的查詢效率高、樹狀的資訊管理模式、分布式的部署架構以及靈活而細膩的通路控制,使LDAP廣泛地應用于基礎性、關鍵性資訊的管理,如使用者資訊、網絡資源資訊等。LDAP的應用主要涉及幾種類型。資訊安全類:數字證書管理、授權管理、單點登入;科學計算類:DCE (Distributed Computing Envirionment,分布式計算環境)、UDDI (Universal Description,Discovery and Integration, 統一描述、發現和內建協定);網絡資源管理類:MAIL系統、DNS系統、網絡使用者管理、電話号碼簿;電子政務資源管理類:内網組織資訊服務、電子政務目錄體系、人口基礎庫、法人基礎庫。

  目前,LDAP已應用在北京大學校園網絡使用者管理系統、Novell的eProvision應用解決方案、上海公務網統一使用者管理、中國數字圖書館系統的使用者管理部分,以及北京、上海、天津、福建等省級CA等。

  某市公務網中的LDAP應用案例:在該市公務網中具有三個LDAP伺服器,一個LDAP伺服器為公務網項目中CA的主,一個LDAP 伺服器為公務網項目中CA的從,第三個目錄伺服器存儲有上海公務網中的所有使用者資訊。在該系統中建立了一個基于Web方式的使用者管理系統,各個局維護自己的資料,CA系統中的使用者資訊以及辦公自動化系統、電子郵件系統、授權管理系統、共享資源管理系統,通過RMI接口實作與使用者組織樹目錄服務系統中資訊的同步。

轉載于:https://www.cnblogs.com/wfpb/archive/2010/03/23/1692317.html