在LDAP中使用角色(Role)和組(Group)來管理用戶
LDAP(輕量級(jí)目錄服務(wù)器)越來越被廣泛的使用,特別是在管理海量用戶信息和管理身份認(rèn)證信息的時(shí)候,LDAP被國(guó)內(nèi)大多數(shù)企業(yè)所使用,從中國(guó)電信,中國(guó)移動(dòng),新浪,和許多省市政府部門都使用LDAP來管理用戶身份的信息。下面重點(diǎn)介紹在LDAP中管理用戶的一些概念和技巧。
LDAP服務(wù)器使用樹狀結(jié)構(gòu)來存儲(chǔ)和查找用戶的信息。這種樹狀結(jié)構(gòu)比較適合用戶身份信息的存儲(chǔ),因?yàn)闊o論在社會(huì)還是在企業(yè)中,對(duì)人的管理是分層的。從地域上的國(guó)家、省市到區(qū)域,從企業(yè)的大部門到小部門,從總經(jīng)理到小職員,所有的管理都是分層的。“人類的層次劃分是社會(huì)活動(dòng)的自然產(chǎn)物”,忘了這句話是誰說的了,但是我們觀察自己的周圍環(huán)境,樹狀結(jié)構(gòu)的分層無處不在,這也是LDAP為什么在人員管理上這么流行的原因,也是LDAP最初設(shè)計(jì)的需求。當(dāng)然,在這里我們不討論人類社會(huì)活動(dòng)現(xiàn)象,只討論LDAP技術(shù)問題。
LDAP在存儲(chǔ)樹狀結(jié)構(gòu)的數(shù)據(jù)比關(guān)系型數(shù)據(jù)庫(kù)有很大的優(yōu)勢(shì)。請(qǐng)?jiān)噲D想想在關(guān)系數(shù)據(jù)庫(kù)中要實(shí)現(xiàn)這種樹狀的數(shù)據(jù),需要費(fèi)一番功夫,并且要定位層次比較深的節(jié)點(diǎn)的數(shù)據(jù)需要經(jīng)過復(fù)雜的查詢和轉(zhuǎn)換。但是LDAP這種樹狀的結(jié)構(gòu)也有一個(gè)重要的缺點(diǎn),就是很難反映出除了結(jié)構(gòu)層次之外的其他關(guān)系(例如在同一個(gè)組織之下的管理和被管理的關(guān)系),而且當(dāng)組織結(jié)構(gòu)經(jīng)常發(fā)生變化的情況下,樹狀結(jié)構(gòu)很難滿足這種靈活性的要求。有樹狀結(jié)構(gòu)特點(diǎn)決定,當(dāng)一個(gè)組織變化的時(shí)候,這個(gè)組織下的所有節(jié)點(diǎn)都需要一一變化。
因此,在LDAP中出現(xiàn)了Group(組)和Role(角色)來動(dòng)態(tài)的管理節(jié)點(diǎn)之間的關(guān)系。例如,建立一個(gè)“管理員”的組或角色,然后可以將不同組織結(jié)構(gòu)下的人員放到“管理員”這個(gè)邏輯結(jié)構(gòu)下。那么通過“管理員”這個(gè)虛擬的組織結(jié)構(gòu)可以將不同物理組織下的人員動(dòng)態(tài)的組合在一起。例如給“管理員”賦予特殊的權(quán)力,使他們能夠修改本機(jī)構(gòu)中的人員信息。過了一段時(shí)間,如果需要將“管理員”這個(gè)邏輯組織取消或者改動(dòng),只需要在LDAP的單個(gè)節(jié)點(diǎn)上操作,而實(shí)際“管理員”邏輯結(jié)構(gòu)的成員們,不需要作任何的變化,原來是在哪個(gè)物理組織,現(xiàn)在也不用變化。這種Group(組)和Role(角色)的出現(xiàn)是增加了節(jié)點(diǎn)之間的關(guān)聯(lián)程度。
Group(組)和Role(角色)的功能基本相同,操作起來也很類似。那么Group(組)和Role(角色)到底有什么區(qū)別呢?事實(shí)上,由于實(shí)現(xiàn)方法不同,Group(組)和Role(角色)在某些操作上體現(xiàn)出不同的性能。
Group(組)的實(shí)現(xiàn)機(jī)制很簡(jiǎn)單,每個(gè)Group本身就是LDAP的一個(gè)實(shí)體。這個(gè)實(shí)體有個(gè)member的屬性。每次將一個(gè)成員添加到這個(gè)Group中就會(huì)在Member屬性中添加一條記錄(成員的DN)。如果這個(gè)Group有200個(gè)成員,那么它的member屬性中會(huì)有200條記錄。這種實(shí)現(xiàn)方式非常適合下面的操作:1. 列舉當(dāng)前Group下的所有成員。2.將一些成員從當(dāng)前的Group中刪除或添加。因?yàn)樗械某蓡T都記錄在Group實(shí)體的屬性里;這種實(shí)現(xiàn)方式非常不適合下面的操作:查找某個(gè)用戶所屬的所有Group。這個(gè)操作可能要去每個(gè)Group中查找信息。
Role(角色)的實(shí)現(xiàn)機(jī)制就比較復(fù)雜了。其實(shí)每個(gè)LDAP實(shí)體本身都有一個(gè)“nsrole”的屬性。如果某個(gè)角色賦予這個(gè)用戶的話,就會(huì)在這個(gè)用戶的“nsrole”(其實(shí)是nsroleDN,這個(gè)會(huì)在以后解釋)的屬性中添加一個(gè)角色的記錄。如果當(dāng)前用戶有10個(gè)角色(例如,他又是領(lǐng)導(dǎo),又是員工,又是管理員,又是教授....),那么在這個(gè)用戶的"nsrole"屬性中會(huì)有10條記錄(Role的DN)。這種實(shí)現(xiàn)方式非常適合下面的操作: 列舉當(dāng)前用戶擁有的所有的角色,因?yàn)樵谟脩舻?#8220;nsrole”屬性中記錄了所有的角色。因此給一個(gè)用戶授權(quán)通常使用角色,這是因?yàn)閺挠脩粜畔⒅芯湍芎芸飓@得當(dāng)前用戶所有的角色,以及相關(guān)的權(quán)限。
另外還有一些準(zhǔn)則來幫助判斷在設(shè)計(jì)時(shí)到底使用Group還是Role。
1 使用Group會(huì)很容易將用戶從一系列“邏輯組織”中刪除或添加。只要是Group的創(chuàng)建者,就有權(quán)限修改Group中的member屬性。而角色(Role)的信息存在每個(gè)用戶的“nsroleDN”中,需要特定的權(quán)限才能修改這個(gè)屬性。
2 如果要使用分布式部署(例如使用Chaining的方式),要考慮到角色(Role)是無法跨越服務(wù)器的界限
3 如果成員數(shù)量巨大(超過20000)個(gè),可以使用動(dòng)態(tài)組的概念(FilterGroup),這個(gè)以后再將。
posted @ 2007-09-24 11:32 wader 閱讀(5684) | 評(píng)論 (0) | 編輯 收藏