




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、一、 LDAP介紹LDAP是輕量級目錄訪問協議的簡稱(Lightweight Directory Access Protocol).用于訪問目錄服務。它是X.500目錄訪問協議的移植,但是簡化了實現方法。二、 目錄服務與關系數據庫之間的區別a) 目錄查詢操作比關系數據庫有更高的效率,但是更新效率比關系數據庫低b) 目錄不支持關系數據庫那樣的復雜查詢,比如兩個表的連接。c) 目錄不支持多操作的事物完整性,沒有方式確認一些操作是全部成功還是全部失敗d) 目錄能夠能好和更靈活的支持子查詢和匹配查詢e) 目錄協議更適合應用于廣域網,比如因特網或者大型公司的網絡f) 目錄的管理,配置,和調試比關系型數據
2、庫更簡單g) 在使用關系數據庫之前,必須首先定義表結構(模式)才可以進行操作。而目錄中所使用的模式是由LDAP定義好的一系列類組成的。對于目錄中的每條記錄中必須屬于其中的一個類或者多個類。這些類定義了該記錄中可以存儲的信息。h) 目錄以對象的形式存儲數據。信息被組織成樹型結構。i) 目錄服務支持分布式存儲結構,容易實現數據的擴展,能滿足大容量存儲的要求。三、 LDAP的優點1:可以存儲在其它條件下很難存儲的管理信息2:數據安全可靠,訪問控制粒度細膩。3:LDAP是一個標準的,開放的協議,具有平臺無關性。4:數據分布廣,規模可靈活擴充。5:LDAP目錄服務器可以使任何一種開放源代碼或商用的LDA
3、P目錄服務器。四、 LDAP模型。是LDAP的一個組成部分,用于指導客戶如何使用目錄服務LDAP 定義了四個模型,包括信息模型,命名模型,功能模型,安全模型。1.LDAP 信息模型(LDAP information model)LDAP信息模型用于描述LDAP中信息的表達方式。LDAP信息模型包含三部分 EntriesAttributesValuesEntry:Directry中最基本的信息單元,Entry中所包含的信息描述了現實世界中的一個真實的對象,在目錄系統中它可以理解為,目錄樹中的一個節點 。在目錄中添加一個Entry時,該Entry必須屬于一個或多個object class ,每一個
4、object class 規定了該Entry中必須要包含的屬性,以及允許使用的屬性。Entry所屬的類型由屬性objectclass規定。每一個Entry都有一個DN(distinguished name) 用于唯一的標志Entry在directory中的位置。如下圖所示: 根節點DN的命名有多種方法,其中之一就是域名命名法。例如:我們要以公司的網址作為公司目錄樹的根節點。如 那么根節點的DN應該為 DN:dc=sohu,dc=com上圖中根節點的DN :dc=example,dc=com 而該根節點有兩個子節點,ou=people,和ou=servers。 People節點的DN:ou=Pe
5、ople,dc=example,dc=comRDN:是目錄樹中節點的相對分辨名。如:People節點的DN:ou=People,dc=example,dc=com 而該節點的RDN:ou=PeopleAttribute: 每個Entry都是由許多Attribute組成的。每一個屬性(Attribute)描述的是對象的一個特征。每一個屬性(Attribute)由一個類型(type)和一個或多個值組成(Value) 如下圖所示:2.LDAP命名模型(LDAP Naming Model)LDAP命名模型定義了如何在目錄系統中組織數據以及如何從目錄系統中查找數據LDAP命名模型指定將Entry按類似倒
6、立的樹形結構進行規劃。非常類似于UNIX系統得文件系統如下圖所示:Unix File SystemA Directory TreeLDAP 目錄結構與Unix系統的文件系統主要有三點不同1. UNIX文件系統有一個根路徑,作為訪問所有文件和目錄的入口。而LDAP 目錄結構中的root Entry只是一個特殊的Entry,它包含了目錄服務器的配置信息,通常情況下,并不用來存儲信息2. 在LDAP 目錄中任何一個節點都可以包含信息,同時也可以是一個容器,也就是說任何一個LDAP Entry都可以有子節點。而UNIX文件系統中的節點要么是一個文件,要么是一個目錄。而不能同時是這兩種情況。只有目錄才可
7、以擁有子節點。下圖表示了LDAP 是一個典型的目錄結構LDAP Directory3. UNIX文件系統目錄結構與LDAP 目錄的第三個區別在于他們的每一個節點的命名不同。LDAP目錄中節點的命名和UNIX文件系統目錄結構中的節點的命名是相反的。上圖示UNIX 文件系統結構,如果要定位到grep節點的話,命名如下/user/bin/grep上圖是一個典型的目錄結構 第一個節點DN命名為:dn:dc=example,dc=com第二個節點DN命名為:dn:ou=People,dc=example,dc=com第三個節點DN命名為:dn:uid=bjensen,ou=people,dc=examp
8、le,dc=com我們說每一個Entry的DN是唯一的,就是因為這種數形結構決定了,從根節點到其它任何一個節點的路徑是唯一的。RDN:在DN中最左邊的內容稱為相對域名。如ou=People,dc=example,dc=com其RDN為ou=People對于共享同一個父節點的所有節點的RDN必須是唯一的。如果不屬于同一個節點則節點的RDN可以相同。特殊字符:以下字符如果出現在Entry中的屬性值,必須進行轉義 # -# ,-, +-+“-” - - - ; - ;如:o=United Widgets, Ltd., c=GB別名在LDAP中可以定義一個別名Entry,指向另外一個Entry。如下圖
9、所示如何創建別名Entry要創建別名Entry,該Entry的object class必須是alias。而且其屬性aliasedObjectName的值必須是該Entry所指向的Entry的DN。不過一般情況下應該避免使用別名Entry。會影響性能。而且如果被引用的Entry被刪除的話,該Entry就會指向一個錯誤的結果。LDAP URL由于使用Alias Entry有許多缺點,可以使用LDAP URL或referral代替Alias Entry。3.LDAP功能模型(LDAP Functional Model)LDAP功能模型描述了LDAP 協議可以采用的相關操作,來訪問存儲在目錄樹中的數據
10、。 LDAP功能模型包含一系列的操作,這些操作被分為三組。1. 更新操作 包括添加,刪除,重命名,修改Entry2. Interrogation Operation用于數據的查詢3. 認證和控制 (bind unbind abandon)Interrogation Operation1. The LDAP Search Operation該操作需要八個參數a. base object也可以表示為DN。表明你想要查詢direcoty中樹的頂點。b. search scopeDN 與search scope兩個參數限定了要搜索數據的范圍共有三個scopeSub 搜索范圍是包含頂節點在內的一棵子樹
11、如下圖其中DN =”ou=People,dc=example,dc=com”Base 搜索范圍只包含一個節點 如下圖其中DN =”ou=People,dc=example,dc=com”Onelevel 其搜索范圍是DN所表示的節點下的直接子節點。如下圖其中DN =”ou=People,dc=example,dc=com”c. aliasd. size limit 表示返回的符合條件的Entry的數目,0表示返回所有符合條件的Entry。目錄服務器端返回一個LDAP_SIZELIMIT_ EXCEEDED。e. time limit表示搜索一次所需要的時間,超過時間將停止搜索。服務器端返回一個
12、LDAP_TIMELIMIT_EXCEEDEDf. attribute-only該屬性是一個boolean值,如果為true ,表示服務器端之返回所搜索的Entry的屬性名稱,不返回屬性值。g. filter通過該屬性可以更精確的搜索結果。就像SQL語句中的條件查詢。Filter 分類1.(sn=smith)匹配屬性sn的值包含smith的Entry2 (sn=smith*)匹配屬性sn的值以smith開始的所有Entry 如smithers,smithsonain等。其中“*”表示通配符,代表任意字符。3 (sn=jensen) 匹配屬性sn的值聽起來像jensen 的Entry。不同的目錄
13、服務器,有不同的實現方法。4 (age21)或者(!(age=21)匹配屬性age的值大于21的Entry 如果是字符的話,如(sn21)匹配屬性sn的值包含smith而且屬性age的值大于21的Entry(|(sn=smith)(age21)匹配屬性sn的值包含smith或者屬性age的值大于21的Entry(&(mail=*)(!(telephoneNumber=*)匹配屬性mail的值不為空,而且屬性telephoneNumber為空的Entry7 如果屬性的值包含以下五個特殊字符的話必須進行轉義 如:(cn=A*Star) 則必須改為(cn=A2AStar)h. return attr
14、ibutes該屬性表示客戶的搜索結果中需要返回的和用戶相關的屬性列表,如果為空表示返回所有屬性。4.LDAP 安全模型安全模型的作用:是提供一個框架,保護目錄中的信息不被非法訪問。LDAP中的安全模型主要通過身份認證、安全通道和訪問控制(ACL)來實現LDAP是一個面向連接的協議,在能夠對LDAP目錄進行任何操作之前,LDAP客戶端必須獲得一個到LDAP服務端的一個連接,在這個過程中需要對LDAP客戶端的身份進行驗證,這一過程可以理解為用戶綁定。LDAPV2 只支持簡單的密碼驗證。LDAPV3 實現了SASL安全框架,SASL為多種驗證協議提供了一種標準的驗證方法,對于不同的驗證系統,可以實現
15、特定的SASL機制。SASL機制代表了一種驗證協議。在用戶通過驗證之后,可以為該用戶分配附加的權限,比如一些用戶只能查看特定的Entry,而不能修改。一些用戶可以查看并且修改所有的Entry等。這一過程可以理解為訪問控制。五、 LDIFLDIF通過一個文本文件,用來描述目錄數據,可以將目錄服務器中的數據導出到一個LDIF文件中,并且可以將LDIF文件中的數據導入到另一個目錄服務器。即使這兩個目錄服務器內部使用的是不同的數據庫格式。 有兩種類型的LDIF文件,第一種用來描述Directory目錄數據的,第二種包含更新語句,用于更新現有的Directory條目數據。 第一種文件,內容包含兩部分:第
16、一部分是DN,第二部分是一系列的屬性-值對 如下圖:以上的LDIF文件只包含了一個Directory Entry。可以在一個LDIF文件中包含多個Entry第二種文件,包含更新語句。第一行同樣是DN。第二行是更新類型,后邊是要更新的屬性及值。當然也可以用來添加新的Entry。如下圖:添加一條Entry(注意第二行:changetype:add)如下圖:刪除一條Entry 如下圖:修改一條Entry 語法如下:dn: dn of entry to be modifiedchangetype: modifymodifytype: attribute typeattribute type: attr
17、ibute value添加屬性示例刪除屬性示例或者修改屬性值也可以將多條更新語句放在一個文件里,各語句之間用“-”分開重新命名Entry或移動Entry語法:dn: 的名稱changetype: moddn/changetype類型必須為newsuperior:如果要移動一條則該項表示一個新的節點的deleteoldrdn: ( 0 | 1 )該項表示是否要刪除修改以前的不刪除newrdn:的新由于一條Entry的DN是由該Entry的RDN 和它的父節點的DN組成的。一條Entry的RDN 是該Entry中的一個屬性。就像關系數據庫中,主鍵值可以唯一區區分一條記錄一樣,在同一個節點下的所有E
18、ntry中的RDN必須由唯一標識該Entry屬性組成。所以重新命名Entry,也就是重新命名該Entry的RDN。示例如下:執行以上語句后該如下所示:dn: uid=babsj, ou=People, dc=example, dc=comuid: babsjuid: bjensen移動一條示例如下:六、 LDAP模式(schema)如果你使用過關系型數據庫,那么對模式應該不會陌生。關系數據庫系統都是通過表格的形式進行數據存儲的。在這之前,我們首先要定義表結構,也即是模式。表結構由一些字段組成,每個字段都有一個類型,以及一些約束條件。這就規定了我們可以存儲的信息。上面我們介紹過LDAP目錄服務器
19、中存儲的信息是被組織成樹型結構進行存儲的。和存儲信息之前也要定義模式,不過,與關系型數據庫系統不同的是,作為LDAP目錄服務器的用戶而言,一般不需要自己定義模式,所有實現LDAP協議的目錄服務器,都已經定義好了許多模式,這些模式可以解決我們大部分的信息存儲的問題。LDAP模式是由以下一些元素組成的1:Attribute types 屬性類型,也就是屬性名稱。我們已經介紹過,每個屬性名稱其實也代表著一種屬性類型。表示該屬性可以存儲什么樣的信息。2:Attribute syntaxes屬性語法,該元素表示每個屬性名稱所存儲的信息如何組織。3:匹配規則,每一個屬性都有匹配規則,用于數據的比較。4:o
20、bject classes,對象類.上面已經介紹過,每個Entry都必須至少屬于一個object class。規定了該Entry可以存儲那些屬性。下面介紹一下LDAP協議中定義的一些常用屬性極其含義(具體信息看RFC 2252文檔)屬性中文名稱描述c國家名稱值為兩位國家代碼如:中國:CN 美國:UScn通用名稱dc域名組件dc=sohu,dc=comco國家名稱國家的全名gngavenNamehomephone家庭電話號碼mail郵件地址mobile移動電話號碼o組織名稱ou部門名稱通常為組織機構下的一個部門或者一個大型實體下的一個子實體postalCode郵政編碼sn姓,別名st州或者省的名
21、稱street街道地址userPassword用戶密碼uid用戶IDdepartmentNumber部門編號displayName顯示名稱 description描述 employeeNumber員工編號 manager經理下面是一些LDAP協議中定義的object class(具體信息查看RFC 2252文檔)Object class 必須屬性可選屬性accountuseriddescription $ seeAlso $ localityName $ organizationName $ organizationalUnitName $ hostcountrycsearchGuide $
22、descriptiondcObjectdcdevicecnserialNumber $ seeAlso $ owner $ ou $ o $ l $ descriptioninetOrgPerson-person繼承personaudio $ businessCategory $ carLicense $ departmentNumber $ displayName $ employeeNumber $ employeeType $ givenName $ homePhone $ homePostalAddress $ initials $ jpegPhoto $ labeledURI $ m
23、ail $ manager $ mobile $ o $ pager $ photo $ roomNumber $ secretary $ uid $ userCertificate $ x500uniqueIdentifier $ preferredLanguage $ userSMIMECertificate $ userPKCS12organizationalPerson繼承Persontitle $ x121Address $ registeredAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNumber
24、 $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName $ ou $ st $ lorganizationouserPassword $ searchGuide $ seeAlso $ businessCategory $ x121Address $ registeredAddress $
25、 destinationIndicator $ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName $ st $ l $ descriptionorganizationalRolecnx121Address $
26、registeredAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTelephoneNumber $ seeAlso $ roleOccupant $ preferredDeliveryMethod $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliv
27、eryOfficeName $ ou $ st $ l $ descriptionorganizationalUnitouuserPassword $ searchGuide $ seeAlso $ businessCategory $ x121Address $ registeredAddress $ destinationIndicator $ preferredDeliveryMethod $ telexNumber $ teletexTerminalIdentifier $ telephoneNumber $ internationaliSDNNumber $ facsimileTel
28、ephoneNumber $ street $ postOfficeBox $ postalCode $ postalAddress $ physicalDeliveryOfficeName $ st $ l $ descriptionpersoncn snuserPassword $ telephoneNumber $ seeAlso $ descriptionTop(所有類的基類)七、 常用目錄服務器1:Apache directory server2:Sun directory server 3:openDS 一個開源的,基于LDAP和DSML標準的Directory service。D
29、irectory service不僅包括Directory server,還有其它與directory相關的基本service:directory proxy 、virtual dirctory、namespace distribution和數據同步Directory server是一個可以通過網絡訪問,信息分級存儲的數據庫。OpenDS只能用在linux操作系統。該項目的地址為:4: NetscapeDirectory Server5: Window AD八、 Apache directory server安裝與使用1:下載ApacheDS 地址為: 2:ApacheDS的安裝比較簡單,沒有
30、什么特殊的設置。在ApacheDS 安裝完成后要啟動ApacheDS服務。路徑如下:控制面板- 管理工具-服務-Apache Directory server ApacheDS的監聽端口默認為10389 3:安裝Apache directory studio。下載地址同上。該軟件是ApacheDS的一個客戶端工具。用于連接ApacheDS,搜索,更新,刪除,添加數據。安裝時也沒有特別設置,請按默認設置安裝該軟件。 4:使用Apache directory studio連接ApacheDS 步驟如下:第一步:在菜單欄中選擇LDAP菜單下的New Connection選項第二步:在下面的對話框中輸
31、入相應的值。第三步:在一下對話框中輸入要連接的根DN和密碼。在ApacheDS安裝完成后,已經創建了幾個DIT(目錄信息樹),第一次登錄ApacheDS的話一般會連接如下輸入的根節點的DN 密碼為:secret。當然可以在第一個選項框中選擇No Authentication。這是不需要輸入下面的驗證信息。這種登錄術語匿名登錄。權限受限制。第四步。連接完成后,如下圖:圖中出現了apahceDS安裝默認創建的三個目錄信息樹第五步:創建Partition。ApacheDS中的目錄信息是保存在Partition中的。所以在創建新的目錄樹之前首先要創建Partition。該文件路徑如下:C:Progra
32、m FilesApache Directory Serverinstancesdefaultconf 在該文件中找到Partitions元素。添加元素。第六步:創建完成之后,重啟Apache direcory server 服務。在Apache directory studio視圖中看到結果如下,在右側欄中我們可以看到我們剛剛添加的Partition。但是在左側欄中,我們并沒有看到該目錄分支存在。因為,必須要創建一個Context Entry。第七步:創建Context Entry 12 3 4 5 6九、 LDAP應用場景使用JNDI操作目錄服務1. 準備連接目錄服務器的相應配置文件(以Ap
33、acheDS為例)java.naming.factory.initial=vider.url=ldap:/localhost:10389/dc=example,dc=comjava.naming.security.authentication=simplejava.naming.security.principal=uid=liujz,dc=example,dc=coms=1234562. 創建測試類public class LDAPTestprivate static DirContext ctx=null;privateProperties ldapProps
34、;public LDAPTest(Properties ldapProp)This.ldapProp= ldapProp;public DirContext getDirContext()If(ctx=null)ctx = new InitialDirContext(ldapProps);return ctx ;/從LDAP服務器中查詢符合條件的Entrypublic void queryEntry()SearchControls sc = new SearchControls();/用于設置查詢范圍/有三種查詢范圍SUBTREE_SCOPE:表示在以指定對象為根的子樹中查找,可以返回多個元素
35、ONLEVEL_SCOPE:表示指定對象極其直接子實體OBJECT_SCOPE:表示返回指定對象。SearchScope(SearchControls.SUBTREE_SCOPE); /該方法有單個參數,第一個參數是DN是一種相對的,因為根據配置文件,我們已經連接到根DN為dc=example,dc=com的目錄樹上,所以一下方法查詢的Entry的DN為 ou=Account,dc=example,dc=com。第二個參數是過濾器,相當于SQL中的where子句。第三個參數為查詢控制String dn = “ou=Account”; String filter = “ou=Account”;N
36、amingEnumeration result = getDirContext().search(dn,filter,sc);While(result.hasMore()xt(); Attributes attrs = entry.getAttributes(); Attribute attr = attrs.get(“ou”); System.out.println(“ou=”+attr.get();/向LDAP服務器中添加EntryPublicvoid addEntry() /在ou=account,dc=example,dc=com節點下添加一個子節點。其RDN為cn=liujianzh
37、ong Attributes attrs = new BasicAttributes();a(“cn”,”liujianzhong”); attrs.put(“sn”,”liu”); attrs.put(“userpassword”,”123456”); BasicAttribute objectClassSet = new BasicAtrribute(“objectclass”);objectClassSet.add(“top”): objectClassSet.add(“person”); objectClassSet.add(“organizationalPerson”); objectClassSet.add(“inetOrgPerson”);attrs.put(objectClassSet);ctx.createSubContext(“cn=liujianzhong,ou=Account”,attrs);/刪除LDAP目錄服務器中指定的Entry,如果該節點為葉子節點則直接刪除,否則要先得到該節點下的所有葉子節點,然后從最底層的葉子節點刪除,直到刪除所有葉子節點為止Publicvoid delEntry()/刪除葉子節點String DN = “cn=liujianzhong,ou=Account” ;getDirContext().destroySubcon
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 提升工作效率的教育技術選擇及實施策略分析
- 人工智能輔助學生心理輔導的探索與實踐
- 廣西現代職業技術學院《大學物理學下》2023-2024學年第一學期期末試卷
- 貴州盛華職業學院《健美操理論與實踐Ⅱ》2023-2024學年第一學期期末試卷
- 廉潔沙龍活動方案
- 惠州衛生職業技術學院《細胞生物學和醫學遺傳學》2023-2024學年第一學期期末試卷
- 幼兒操場闖關活動方案
- 紅河衛生職業學院《線描》2023-2024學年第一學期期末試卷
- 幼兒園秋季兒童活動方案
- 黃岡科技職業學院《食品儀器分析實驗》2023-2024學年第一學期期末試卷
- 工廠注塑考試題及答案
- 2024年懷化麻陽苗族自治縣招聘事業單位工作人員筆試真題
- 湖南省長沙市望城區第二中學2024-2025學年高一下學期6月第三次月考政治試卷(含答案)
- T/CSPSTC 112-2023氫氣管道工程施工技術規范
- 微弱的光亮(2024年山東煙臺中考語文試卷記敘文閱讀試題)
- 24春國家開放大學《農業推廣》調查報告參考答案
- 機械原理課程設計-沖壓機構及送料機構設計說明書
- 寧波大學2010-2011學年《模擬電子技術基礎》期末考試及答案A卷(A3版)
- 《人工智能2.0》說明文閱讀練習及答案
- 機械制圖基礎知識完整版
- 竹子深加工項目項目建議書寫作范本
評論
0/150
提交評論