LDAPChina序言:這篇文章是互聯網上最流行的一篇介紹LDAP基礎知識的文章,本文作者
Michael Donnelly是
LDAPMAN.org的站長。由于本文譯文較長,我們將其分為兩部分,第一部分介紹LDAP概論,第二部分介紹LDAP基礎知識。感謝網友
Brimmer翻譯此文。
如
果你在計算機行業工作,那么對LDAP可能早有耳聞了。想深入地了解LDAP嗎?那么可以好好地讀一下這篇文章。這篇介紹性的文章是一系列介紹如何在企業
中設計、實現和集成LDAP環境的文章的頭一篇。主要是先讓你熟悉一下LDAP的基本概念,那些比較困難的細節問題將放到以后討論。在這篇文章中我們將要
介紹:
什么是LDAP?
什么時候該用LDAP存儲數據?
現
在LDAP技術不僅發展得很快而且也是激動人心的。在企業范圍內實現LDAP可以讓運行在幾乎所有計算機平臺上的所有的應用程序從LDAP目錄中獲取信
息。LDAP目錄中可以存儲各種類型的數據:電子郵件地址、郵件路由信息、人力資源數據、公用密匙、聯系人列表,等等。通過把LDAP目錄作為系統集成中
的一個重要環節,可以簡化員工在企業內部查詢信息的步驟,甚至連主要的數據源都可以放在任何地方。如果Oracle、Sybase、Informix或
Microsoft SQL數據庫中已經存儲了類似的數據,那么LDAP和這些數據庫到底有什么不同呢?是什么讓它更具優勢?請繼續讀下去吧!
什么是LDAP?
LDAP
的英文全稱是Lightweight Directory Access
Protocol,一般都簡稱為LDAP。它是基于X.500標準的,但是簡單多了并且可以根據需要定制。與X.500不同,LDAP支持TCP/IP,
這對訪問Internet是必須的。LDAP的核心規范在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPChina.com RFC專欄中找到。
怎么使用LDAP這個術語呢?
在
日常交談中,你可能會聽到有些人這么說:“我們要把那些東西存在LDAP中嗎?”,或者“從LDAP數據庫中取出那些數據!”,又或者“我們怎么把
LDAP和關系型數據庫集成在一起?”。嚴格地說,LDAP根本不是數據庫而是用來訪問存儲在信息目錄(也就是LDAP目錄)中的信息的協議。更為確切和正式的說法應該是象這樣的:“通過使用LDAP,可以在信息目錄的正確位置讀?。ɑ虼鎯Γ祿薄5?,也沒有必要吹毛求疵,盡管表達得不夠準確,我們也都知道對方在說什么。
LDAP目錄是數據庫嗎?
就
象Sybase、Oracle、Informix或Microsoft的數據庫管理系統(DBMS)是用于處理查詢和更新關系型數據庫那樣,LDAP服務
器也是用來處理查詢和更新LDAP目錄的。換句話來說LDAP目錄也是一種類型的數據庫,但是不是關系型數據庫。不象被設計成每分鐘需要處理成百上千條數
據變化的數據庫,例如:在電子商務中經常用到的在線交易處理(OLTP)系統,LDAP主要是優化數據讀取的性能。
LDAP目錄的優勢
現在該說說LDAP目錄到底有些什么優勢了?,F在LDAP的流行是很多因素共同作用的結果。我在這里說的不過是一些基本的原因,請你注意一下這不過是一小部分原因。
可能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目錄中是十分有效的:
- 公司員工的電話號碼簿和組織結構圖
- 客戶的聯系信息
- 計算機管理需要的信息,包括NIS映射、email假名,等等
- 軟件包的配置信息
- 公用證書和安全密匙
什么時候該用LDAP存儲數據?
大
多數的LDAP服務器都為讀密集型的操作進行專門的優化。因此,當從LDAP服務器中讀取數據的時候會比從專門為OLTP優化的關系型數據庫中讀取數據快
一個數量級。也是因為專門為讀的性能進行優化,大多數的LDAP目錄服務器并不適合存儲需要經常改變的數據。例如,用LDAP服務器來存儲電話號碼是一個
很好的選擇,但是它不能作為電子商務站點的數據庫服務器。
如果下面每一個問題的答案都是“是”,那么把數據存在LDAP中就是一個好主意。
- 需要在任何平臺上都能讀取數據嗎?
- 每一個單獨的記錄項是不是每一天都只有很少的改變?
- 可以把數據保存在平面數據庫(flat database)而不是關系型數據庫中嗎?換句話來說,也就是不管什么范式不范式的,把所有東西都存在一個記錄中(差不多只要滿足第一范式)。
最
后一個問題可能會唬住一些人,其實用平面數據庫去存儲一些關系型的數據也是很一般的。例如,一條公司員工的記錄就可以包含經理的登錄名。用LDAP來存儲
這類信息是很方便的。一個簡單的判斷方法:如果可以把數據保存在一張張的卡片里,就可以很容易地把它存在LDAP目錄里。
接上文
LDAP目錄樹的結構
單條LDAP記錄
定制目錄的對象類
一個LDAP單個條目的例子
LDAP復制
安全和訪問控制
LDAP目錄樹的結構
LDAP
目錄以樹狀的層次結構來存儲數據。如果你對自頂向下的DNS樹或UNIX文件的目錄樹比較熟悉,也就很容易掌握LDAP目錄樹這個概念了。就象DNS的主
機名那樣,LDAP目錄記錄的分辨名(Distinguished Name,簡稱DN)是用來讀取單條記錄,以及回溯到樹的頂部。后面會做詳細地介紹。
為什么要用層次結構來組織數據呢?原因是多方面的。下面是可能遇到的一些情況:
- 如果你想把所有的美國客戶的聯系信息都“推”到位于到西雅圖辦公室(負責營銷)的LDAP服務器上, 但是你不想把公司的資產管理信息“推”到那里。
- 你可能想根據目錄樹的結構給予不同的員工組不同的權限。在下面的例子里,資產管理組對“asset-mgmt”部分有完全的訪問權限,但是不能訪問其它地方。
- 把LDAP存儲和復制功能結合起來,可以定制目錄樹的結構以降低對WAN帶寬的要求。位于西雅圖的營銷辦公室需要每分鐘更新的美國銷售狀況的信息,但是歐洲的銷售情況就只要每小時更新一次就行了。
刨根問底:基準DN
LDAP目錄樹的最頂部就是根,也就是所謂的“基準DN”?;鶞蔇N通常使用下面列出的三種格式之一。假定我在名為FooBar的電子商務公司工作,這家公司在Internet上的名字是foobar.com。
o="FooBar, Inc.", c=US
(以X.500格式表示的基準DN)
在
這個例子中,o=FooBar, Inc. 表示組織名,在這里就是公司名的同義詞。c=US
表示公司的總部在美國。以前,一般都用這種方式來表示基準DN。但是事物總是在不斷變化的,現在所有的公司都已經(或計劃)上Internet上。隨著
Internet的全球化,在基準DN中使用國家代碼很容易讓人產生混淆。現在,X.500格式發展成下面列出的兩種格式。
o=foobar.com
(用公司的Internet地址表示的基準DN)
這種格式很直觀,用公司的域名作為基準DN。這也是現在最常用的格式。
dc=foobar, dc=com
(用DNS域名的不同部分組成的基準DN)
就
象上面那一種格式,這種格式也是以DNS域名為基礎的,但是上面那種格式不改變域名(也就更易讀),而這種格式把域名:foobar.com分成兩部分
dc=foobar,
dc=com。在理論上,這種格式可能會更靈活一點,但是對于最終用戶來說也更難記憶一點。考慮一下foobar.com這個例子。當
foobar.com和gizmo.com合并之后,可以簡單的把“dc=com”當作基準DN。把新的記錄放到已經存在的dc=gizmo,
dc=com目錄下,這樣就簡化了很多工作(當然,如果foobar.com和wocket.edu合并,這個方法就不能用了)。如果LDAP服務器是新
安裝的,我建議你使用這種格式。再請注意一下,如果你打算使用活動目錄(Actrive
Directory),Microsoft已經限制你必須使用這種格式。
更上一層樓:在目錄樹中怎么組織數據
在UNIX文件系統中,最頂層是根目錄(root)。在根目錄的下面有很多的文件和目錄。象上面介紹的那樣,LDAP目錄也是用