LDAP

LDAP

什麼是LDAP?

  • LDAP的英文全稱是Lightweight Directory Access Protocol,一般都簡稱為LDAP。它是關於X.500標準的,但是簡單多了並且可以根據需要定制。與X.500不同,LDAP支持TCP/IP, 這對訪問Internet是必須的。LDAP的核心規範在RFC中都有定義,所有與LDAP相關的RFC都可以在LDAPman RFC網頁中找到。

  • LDAP根本不是資料庫而是用來訪問存儲在信息目錄(也就是LDAP目錄)中的信息的傳輸協定

  • LDAP傳輸協定是跨平台的和標準的傳輸協定,因此應用程式就不用為LDAP目錄放在什麼樣的伺服器上操心了。

    • 實際上,LDAP得到了業界的廣泛認可,因 為它是Internet的標準。產商都很願意在產品中加入對LDAP的支持,因為他們根本不用考慮另一端(客戶端或服務端)是怎麼樣的。
    • LDAP伺服器可 以是任何一個開發來源碼或商用的LDAP目錄伺服器(或者還可能是具有LDAP界面的關係型資料庫),因為可以用同樣的傳輸協定、客戶端連接軟體包和查詢 指令與LDAP伺服器進行交互。
  • LDAP伺服器可以用「推」或「拉」的方法複製部分或全部資料

    • 如果要在DBMS中使用相同的複製功能,資料庫產商就會要你支付額外的費用,而且也很難管理。
  • LDAP允許你根據需要使用ACI(一般都稱為ACL或者訪問控制列表)控制對資料讀和寫的權限。

    • 例如,設備管理員可以有權改變員工的工作地點和辦公室號 碼,但是不允許改變記錄中其它的域。
    • ACI可以根據誰訪問資料、訪問什麼資料、資料存在什麼地方以及其它對資料進行訪問控制。
    • 因為這些都是由LDAP目錄 伺服器完成的,所以不用擔心在客戶端的應用程式上是否要進行安全檢查。

可能LDAP最大的優勢是

  • 可以在任何電腦平台上,用很容易獲得
  • 而且數目不斷增加的LDAP的客戶端程序訪問LDAP目錄。而且也很容易定制應用程式為它加上LDAP的支持。

什麼時候該用LDAP存儲資料?

  • 大多數的LDAP伺服器都為讀密集型的操作進行專門的最佳化。

    • 因此,當從LDAP伺服器中讀取資料的時候會比從專門為OLTP最佳化的關係型資料庫中讀取 資料快一個數量級。
    • 也是因為專門為讀的效能進行最佳化,大多數的LDAP目錄伺服器並不適合存儲需要需要經常改變的資料
  • 適合

    • 需要在任何平台上都能讀取資料
    • 每一個單獨的記錄項是不是每一天都只有很少的改變
    • 可以把資料存在平面資料庫(flat database)而不是關係型資料庫中嗎?換句話來說,也就是不管什麼範式不範式的,把所有東西都存在一個記錄中(差不多只要滿足第一範式)。

LDAP目錄樹的結構

  • LDAP目錄以樹狀的層次結構來存儲資料。
    • 就像 DNS的主機名那樣,LDAP目錄記錄的標識名(Distinguished Name,簡稱DN)是用來讀取單個記錄,以及回溯到樹的頂部。
      • 為什麼要用層次結構來組織資料呢?
      • 原因是多方面的。下面是可能遇到的一些情況:
        • 如果你想把所有的美國客戶的聯繫信息都「推」到位於到西雅圖辦公室(負責營銷)的LDAP伺服器上,但是你不想把公司的資產管理信息「推」到那裡。
        • 你可能想根據目錄樹的結構給予不同的員工組不同的權限。在下面的例子裡,資產管理組對「asset-mgmt」部分有完全的訪問權限,但是不能訪問其它地方。
        • 把LDAP存儲和複製功能結合起來,可以定制目錄樹的結構以降低對WAN帶寬的要求。位於西雅圖的營銷辦公室需要每分鐘更新的美國銷售狀況的信息,但是歐洲的銷售情況就只要每小時更新一次就行了。
      1
      2
      3
      4
      5
      6
              dc=org

      |dc=wikipedia
      / \
      ou=people ou=groups

root

  • O=Organization 為組織名,可以3—64個字符長
  • C=Country為國家名,可選,為2個字符長
  • DC = Domain Component.
  • 也就是所謂的「基準DN」。
    • 基準DN通常使用下面列出的三種格式之一。
      • 假定我在名為FooBar的電子商務公司工作,這家公司在Internet上的名字是foobar.com。
      • 第一種
        1
        2
        o="FooBar, Inc.", c=US
        (以X.500格式表示的基準DN)
        • 在這個例子中,o=FooBar, Inc. 表示組織名,在這裡就是公司名的同義詞。
        • c=US 表示公司的總部在美國。
        • 以前,一般都用這種方式來表示基準DN。
        • 但是事物總是在不斷變化的,現在所有的公司都已經(或計劃)上Internet上。隨著 Internet的全球化,在基準DN中使用國家程式碼很容易讓人產生混淆
      • 第二種
        1
        2
        o=foobar.com
        (用公司的Internet位址表示的基準DN)
        • 這種格式很直觀,用公司的域名作為基準DN。這也是現在最常用的格式。
      • 第三種
        1
        2
        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已經限制你必須使用這種格式。

          ou

          • OU=Organization Unit為組織單元,最多可以有四級,每級最長32個字符,可以為中文;
  • 因為歷史上(X.500)的原因,大多數LDAP目錄用OU從邏輯上把資料分開來。
  • OU表示 「Organization Unit」,在X.500傳輸協定中是用來表示公司內部的機構:銷售部、財務部,等等。現在LDAP還保留ou=這樣的命名規則,但是擴展了分類的範圍, 可以分類為:ou=people, ou=groups, ou=devices,等等。更低一級的OU有時用來做更細的歸類。例如:LDAP目錄樹(不包括單獨的記錄)可能會是這樣的:

cn

  • CN=Common Name 為用戶名或服務器名,最長可以到80個字符,可以為中文;
  • 屬性的名字一般是一個易於記憶的字串,例如用cn為通用名(common name)命名,而”mail”代表e-mail位址。

Reference