日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

LDAP与实现

發布時間:2025/3/15 编程问答 21 豆豆
生活随笔 收集整理的這篇文章主要介紹了 LDAP与实现 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

LDAP是什么?

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

LDAP是一個輕量級的產品(LightWeight),是一個Directory(D),存取的協議(Access Protocol)。

我要著重指出,LDAP是一個數據庫,但是又不是一個數據庫。說他是數據庫,因為他是一個數據存儲的東西。但是說他不是數據庫,是因為他的作用沒有數據庫這么強大,而是一個目錄。

LDAP作為一個統一認證的解決方案,主要的優點就在能夠快速響應用戶的查找需求。比如用戶的認證,這可能會有大量的并發。如果用數據庫來實現,由于數據庫結構分成了各個表,要滿足認證這個非常簡單的需求,每次都需要去搜索數據庫,合成過濾,效率慢也沒有好處。雖然可以有Cache,但是還是有點浪費。LDAP就是一張表,只需要用戶名和口令,加上一些其他的東西,非常簡單。從效率和結構上都可以滿足認證的需求。這就是為什么LDAP成為現在很人們的統一認證的解決方案的優勢所在。

?

LDAP特點
LDAP的結構用樹來表示,而不是用表格。正因為這樣,就不能用SQL語句了
LDAP可以很快地得到查詢結果,不過在寫方面,就慢得多
LDAP提供了靜態數據的快速查詢方式
Client/server模型,Server 用于存儲數據,Client提供操作目錄信息樹的工具
這些工具可以將數據庫的內容以文本格式(LDAP 數據交換格式,LDIF)呈現在您的面前
LDAP是一種開放Internet標準,LDAP協議是跨平臺的Interent協議

?

?LDAP的基本模型
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中為了加快查詢的速度,針對不同的數據類型,可以提供不同的匹配方法,如針對字符串類型的相等、模糊、大于小于均提供自己的匹配規則。
2 命名模型:描述LDAP中的數據如何組織
LDAP中的命名模型,也即LDAP中的條目定位方式。在LDAP中每個條目均有自己的DN和RDN。DN是該條目在整個樹中的唯一名稱標識,RDN是條目在父節點下的唯一名稱標識,如同文件系統中,帶路徑的文件名就是DN,文件名就是RDN。
3 功能模型:描述LDAP中的數據操作訪問
在LDAP中共有四類10種操作:查詢類操作,如搜索、比較;更新類操作,如添加條目、刪除條目、修改條目、修改條目名;認證類操作,如綁定、解綁定;其它操作,如放棄和擴展操作。除了擴展操作,另外9種是LDAP的標準操作;擴展操作是LDAP中為了增加新的功能,提供的一種標準的擴展框架,當前已經成為LDAP標準的擴展操作,有修改密碼和StartTLS擴展,在新的RFC標準和草案中正在增加一些新的擴展操作,不同的LDAP廠商也均定義了自己的擴展操作。
4 安全模型:描述LDAP中的安全機制
LDAP中的安全模型主要通過身份認證、安全通道和訪問控制來實現。
3.4.1 身份認證
在LDAP中提供三種認證機制,即匿名、基本認證和SASL(Simple Authentication and Secure Layer)認證。匿名認證即不對用戶進行認證,該方法僅對完全公開的方式適用;基本認證均是通過用戶名和密碼進行身份識別,又分為簡單密碼和摘要密碼認證;SASL認證即LDAP提供的在SSL和TLS安全通道基礎上進行的身份認證,包括數字證書的認證。
4.2 通訊安全
在LDAP中提供了基于SSL/TLS的通訊安全保障。SSL/TLS是基于PKI信息安全技術,是目前Internet上廣泛采用的安全服務。LDAP通過StartTLS方式啟動TLS服務,可以提供通訊中的數據保密性、完整性保護;通過強制客戶端證書認證的TLS服務,同時可以實現對客戶端身份和服務器端身份的雙向驗證。
4.3 訪問控制
雖然LDAP目前并無訪問控制的標準,但從一些草案中或是事實上LDAP產品的訪問控制情況,我們不難看出:LDAP訪問控制異常的靈活和豐富,在LDAP中是基于訪問控制策略語句來實現訪問控制的,這不同于現有的關系型數據庫系統和應用系統,它是通過基于訪問控制列表來實現的,無論是基于組模式或角色模式,都擺脫不了這種限制。
在使用關系型數據庫系統開發應用時,往往是通過幾個固定的數據庫用戶名訪問數據庫。對于應用系統本身的訪問控制,通常是需要建立專門的用戶表,在應用系統內開發針對不同用戶的訪問控制授權代碼,這樣一旦訪問控制策略變更時,往往需要代碼進行變更。總之一句話,關系型數據庫的應用中用戶數據管理和數據庫訪問標識是分離的,復雜的數據訪問控制需要通過應用來實現。
而對于LDAP,用戶數據管理和訪問標識是一體的,應用不需要關心訪問控制的實現。這是由于在LDAP中的訪問控制語句是基于策略語句來實現的,無論是訪問控制的數據對象,還是訪問控制的主體對象,均是與這些對象在樹中的位置和對象本身的數據特征相關。
在LDAP中,可以把整個目錄、目錄的子樹、制定條目、特定條目屬性集或符合某過濾條件的條目作為控制對象進行授權;可以把特定用戶、屬于特定組或所有目錄用戶作為授權主體進行授權;最后,還可以定義對特定位置(例如IP地址或DNS名稱)的訪問權。

?

?

LDAP數據結構
LDAP是實現了指定的數據結構的存貯,它包括以下可以用關系數據庫實現的結構要求:樹狀組織、條目認證、類型定義、許可樹形記錄拷貝。
1 樹狀組織
無論是X500還是LDAP都是采用樹狀方式進行記錄。每一個樹目錄都有一個樹根的入口條目,子記錄全部是這一根條目的子孫。這是目錄與關系數據類型最大的區別(關系數據庫的應用結構也可實現樹狀記錄)。因此,把目錄看作是更高級的樹狀數據庫也未嘗不可,只不過除此外,它不能實現關系存貯的重要功能。
2 條目和條目認證
LDAP是以條目作為認證的根據。ROOT的權限認證與目錄本身無關,但除此外所有條目的認證權限由條目本身的密碼進行認證。LDAP可以配置成各種各樣不同的父子條目權限繼承方式。
每一個條目相當于一個單一的平面文本記錄,由條目自身或指定的條目認證進行訪問控制。因此,LDAP定義的存貯結構等同于一批樹狀組織的平面數據庫,并提供相應的訪問控制。
條目中的記錄以名-值對的形式存在,每一個名值對必須由數據樣式schema預定義。因此,LDAP可以看作是以規定的值類型以名值對形式存貯在一系列以樹狀組織的平面數據庫的記錄的集合。
3 數據樣式(schema)
數據樣式schema是針對不同的應用,由用戶指定(設計)類和屬性類型預定義,條目中的類(objectclass)和屬性必須在在LDAP服務器啟動時載入內存的schema已有定義。因此,AD活動目錄中的條目記錄就必須符合Active Directory的schema中。如果已提供的schema中的定義不夠用,用戶可以自行定義新的schema.
在http://ldap.akbkhome.com/index.php中可以看到常用的schema。
4 對象類型(objectClass)
因為LDAP目錄可以定制成存儲任何文本或二進制數據,到底存什么要由你自己決定。LDAP目錄用對象類型(objectclass)的概念來定義運行哪一類的對象使用什么屬性。在幾乎所有的LDAP服務器中,你都要根據自己的需要擴展基本的LDAP目錄的功能,創建新的對象類型或者擴展現存的對象類型。
條目中的記錄通過objectclass實現分類,objectClass是一個繼承性的類定義,每一個類定義指定必須具備的屬性。如某一條目指定必須符合某個類型,則它必須具備超類所指定的屬性。
通過objectclass分類,分散的條目中的記錄就實際上建立了一個索引結構,為高速的讀查詢打下了基礎。Objectclass也是過濾器的主要查詢對象。
5 過濾器和語法
LDAP是一個查詢為主的記錄結構,無論是何種查詢方式,最終都由過濾器缺點查詢的條件。過濾器相當于SQL中的WHERE子句。任何LDAP的類過濾和字符串都必須放在括號內,如(objectclass=*),指列出所有類型的記錄(不過分類)。
可以使用=,>=,<=,~=(約等于)進行比較,如(number<=100)。合并條件是最怪的,必須把操作符放在兩個操作對象的前面而不是中間,單一操作對象用括號括起來。如
l A與B,不是A&B,而是(&(A)(B))。
l 或使用"|"表示;
l 非使用"!"表示。
l 對于"與",或"或"在操作符后可以跟多個條件表達式,但非后則只參是單個表達式。
詳見RFC1558。
6 樹移植
LDAP最重要的特性和要求并不是讀性能,而是擴展性。這一特性是通過樹移植和樹復制實現的。按LDAP的RFC要求,LDAP目錄應該可以任意地在不同的目錄間連接、合并并實現自動復制,及自動性同步。這意味著用戶可以在任一LDAP中訪問條目,而不用管其中某一部分是否復制自全世界另一目錄中的記錄,同時另一目錄中的記錄同樣在正常運作。
這一特性如果在關系數據庫中實現,意味著要使用程序化的非規范化預復制。類似于匯總帳目的設計。
7 LDIF交換文件
LDIF是LDAP約定的記錄交換格式,以平面文本的形式存在,是大部分LDAP內容交換的基礎,如拷貝、添加、修改等操作,都是基于LDIF文件進行操作。
8 Java或CORBA對象串行化存儲
網絡高效率的訪問加上JAVA的跨平臺能力,當把JAVA或CORBA對象串行化后存儲到LDAP目錄上時,可以產生非同一般的集成效果--實際上,這正是EJB和.NET的網絡定位基礎技術。
使用JAVA或CORBA對象存儲時,必須首先讓LDAP服務支持該對象定義,也就是說包含qmail.schema或corba.schema。
JAVA必須存儲在objectclass=javacontainer的條目中,而且必須帶有cn屬性,這意味著除非該JAVA類專門實現了DirContext接口,對于大多數JAVA類來說,只能采用DirContext代替Context實現bind的添加操作。取出JAVA類相對要簡單得多,只需使用context.lookup()獲得該對象的句柄,然后強制造型成所需要的對象就可以了,如:
Person p=(Person)contex.lookup("cn=elvis,dc=daifu,dc=com");
這個句法在EJB的程序中,是經常用到的。
使用CORBA的跨語言性質,使用CORBA存儲對象比JAVA更加誘人,這意味著所存儲的對象可以被任何語言編寫的客戶端訪問。其實,微軟的.net說到底也非常簡單,無非是把COM對象存儲到微軟自家的目錄ActiveDirectory里面,從而可以在網絡范圍內使用任何微軟平臺的語言進行對象訪問而已。眾所周知,COM就是與CORBA相對的微軟規范。
使用對象串行化技術,可以把常用對象如某個打印機,某個客戶直接存儲到LDAP中,然后快速獲取該對象的引用,這樣,就比把對象信息存儲到關系數據庫中,分別取出屬性,然后再初始化對象操作的做法,效率要高得多了。這是LDAP目前比普通關系數據庫存儲要優秀的地方,而對象數據庫還不成熟。

?

轉載于:https://www.cnblogs.com/hkhk/p/10667912.html

總結

以上是生活随笔為你收集整理的LDAP与实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。