此文爲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的優點ide
2.1.1 跨平臺性能
2.1.2 費用及維護優化
2.1.3 複製技術spa
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名稱)的訪問權。