LDAP 的目錄服務,不僅可以幫助我們管理階層結構的組織或資源,對很多傳公司來說也是非常常用的驗證技術,這篇對 LDAP 做一些簡單介紹。
LDAP (Lightweight Directory Access Protocol) 是一種輕量的目綠服務協定,像是通訊錄一樣記錄人員資訊,可以拿來做帳號整合、驗證,LDAP 目錄服務通常有層級結構,像是公司組織階層。
資料結構

LDAP 資料結構的三層概念是:Schema、Object Class、Attribute Type,上圖就算是一組 Schema,分別簡述如下:
SchemaObject Class的集合,透過集合相同性質的類別,描述現實中的個體的資訊
Object ClassAttribute Type的集合,每種Object Class會定義有哪些必要、可選的Attribute TypeObject Class具有繼承的關係
Attribute Type- 描述資料的內容
- 已鍵值(Key-Value)的方式表示
使用上述的資料結構來組成 LDAP 的樹狀結構,在 LDAP 中稱呼樹的節點為 Entry,一個 Entry 只能使用一種 Object Class 來表達,而葉子就是 Attribute Type 了,下面這張圖表達了 LDAP 目錄樹的關聯階層。
LDAP 的 Attribute Type 很多,可以參考這張列表。
常見的項目這裡筆記一下:
| 屬性名稱 | 全名 | 說明 |
|---|---|---|
| CN | Common Name | 用戶名稱、單位名稱 |
| DN | Distinguished Name | 識別名稱,絕對位置 |
| OU | Organizational Unit Name | 組織單位名稱 |
| DC | Domain Componet | 網域元件 |
基本查詢語法
對 LDAP 伺服器,我們可以使用 LDAP 陳述式來寫查詢語法,藉此找到我們想要尋找的資源,以下做一點簡單介紹:
=(等於)- 例如要尋找名字為 John 的所有物件,可使用:
(givenName=John)這會傳回所有名字為 John 的物件 - 包括括弧是要強調 LDAP 陳述式的開始和結束
- 例如要尋找名字為 John 的所有物件,可使用:
&(邏輯 AND)- 當您有一個以上的條件,或希望序列中的所有條件皆為 True 時可使用此語法
- 例如要尋找所有名字為 John 且住在達拉斯的人,可使用:
(&(givenName=John)(l=Dallas)) - 請注意每個引數都位於自己的一組括弧內
- 整個 LDAP 陳述式必須封裝在主要的括弧組中
!(邏輯 NOT)- 排除具有特定屬性的物件
- 例如要尋找名字為 John 以外的所有物件,可使用:
(!givenName=John) !運算子是直接放在引數的前面,和引數括弧組的裡面
*(萬用字元)- 使用萬用字元來代表任何東西的值
- 例如要尋找標題具有值的所有物件,可使用:
(title=*) - 或是例如要尋找名字以 Jo 開頭,可使用:
(givenName=Jo*)來尋找這些物件
參考資料: