WADER

          java,swt,hibernate,struts,xml,spring,ant,cvs,uml,db,server
          隨筆 - 15, 文章 - 0, 評論 - 0, 引用 - 0
          數據加載中……

          2007年9月24日

          在LDAP中使用角色(Role)和組(Group)來管理用戶

          LDAP(輕量級目錄服務器)越來越被廣泛的使用,特別是在管理海量用戶信息和管理身份認證信息的時候,LDAP被國內大多數企業所使用,從中國電信,中國移動,新浪,和許多省市政府部門都使用LDAP來管理用戶身份的信息。下面重點介紹在LDAP中管理用戶的一些概念和技巧。

          LDAP服務器使用樹狀結構來存儲和查找用戶的信息。這種樹狀結構比較適合用戶身份信息的存儲,因為無論在社會還是在企業中,對人的管理是分層的。從地域上的國家、省市到區域,從企業的大部門到小部門,從總經理到小職員,所有的管理都是分層的。“人類的層次劃分是社會活動的自然產物”,忘了這句話是誰說的了,但是我們觀察自己的周圍環境,樹狀結構的分層無處不在,這也是LDAP為什么在人員管理上這么流行的原因,也是LDAP最初設計的需求。當然,在這里我們不討論人類社會活動現象,只討論LDAP技術問題。

          LDAP在存儲樹狀結構的數據比關系型數據庫有很大的優勢。請試圖想想在關系數據庫中要實現這種樹狀的數據,需要費一番功夫,并且要定位層次比較深的節點的數據需要經過復雜的查詢和轉換。但是LDAP這種樹狀的結構也有一個重要的缺點,就是很難反映出除了結構層次之外的其他關系(例如在同一個組織之下的管理和被管理的關系),而且當組織結構經常發生變化的情況下,樹狀結構很難滿足這種靈活性的要求。有樹狀結構特點決定,當一個組織變化的時候,這個組織下的所有節點都需要一一變化。

          因此,在LDAP中出現了Group(組)和Role(角色)來動態的管理節點之間的關系。例如,建立一個“管理員”的組或角色,然后可以將不同組織結構下的人員放到“管理員”這個邏輯結構下。那么通過“管理員”這個虛擬的組織結構可以將不同物理組織下的人員動態的組合在一起。例如給“管理員”賦予特殊的權力,使他們能夠修改本機構中的人員信息。過了一段時間,如果需要將“管理員”這個邏輯組織取消或者改動,只需要在LDAP的單個節點上操作,而實際“管理員”邏輯結構的成員們,不需要作任何的變化,原來是在哪個物理組織,現在也不用變化。這種Group(組)和Role(角色)的出現是增加了節點之間的關聯程度。

          Group(組)和Role(角色)的功能基本相同,操作起來也很類似。那么Group(組)和Role(角色)到底有什么區別呢?事實上,由于實現方法不同,Group(組)和Role(角色)在某些操作上體現出不同的性能。

          Group(組)的實現機制很簡單,每個Group本身就是LDAP的一個實體。這個實體有個member的屬性。每次將一個成員添加到這個Group中就會在Member屬性中添加一條記錄(成員的DN)。如果這個Group有200個成員,那么它的member屬性中會有200條記錄。這種實現方式非常適合下面的操作:1. 列舉當前Group下的所有成員。2.將一些成員從當前的Group中刪除或添加。因為所有的成員都記錄在Group實體的屬性里;這種實現方式非常不適合下面的操作:查找某個用戶所屬的所有Group。這個操作可能要去每個Group中查找信息。

          Role(角色)的實現機制就比較復雜了。其實每個LDAP實體本身都有一個“nsrole”的屬性。如果某個角色賦予這個用戶的話,就會在這個用戶的“nsrole”(其實是nsroleDN,這個會在以后解釋)的屬性中添加一個角色的記錄。如果當前用戶有10個角色(例如,他又是領導,又是員工,又是管理員,又是教授....),那么在這個用戶的"nsrole"屬性中會有10條記錄(Role的DN)。這種實現方式非常適合下面的操作: 列舉當前用戶擁有的所有的角色,因為在用戶的“nsrole”屬性中記錄了所有的角色。因此給一個用戶授權通常使用角色,這是因為從用戶信息中就能很快獲得當前用戶所有的角色,以及相關的權限。

          另外還有一些準則來幫助判斷在設計時到底使用Group還是Role。

          1 使用Group會很容易將用戶從一系列“邏輯組織”中刪除或添加。只要是Group的創建者,就有權限修改Group中的member屬性。而角色(Role)的信息存在每個用戶的“nsroleDN”中,需要特定的權限才能修改這個屬性。

          2 如果要使用分布式部署(例如使用Chaining的方式),要考慮到角色(Role)是無法跨越服務器的界限

          3 如果成員數量巨大(超過20000)個,可以使用動態組的概念(FilterGroup),這個以后再將。

          posted @ 2007-09-24 11:32 wader 閱讀(5681) | 評論 (0)編輯 收藏

          主站蜘蛛池模板: 万盛区| 雷州市| 牡丹江市| 乌恰县| 凌源市| 霍州市| 谢通门县| 伊春市| 合川市| 鄢陵县| 横峰县| 盖州市| 门源| 灌阳县| 博爱县| 繁昌县| 志丹县| 瑞安市| 湟中县| 泌阳县| 攀枝花市| 云和县| 江北区| 互助| 淮南市| 中方县| 日喀则市| 东阳市| 邵东县| 马尔康县| 黎城县| 松桃| 芮城县| 海安县| 枣庄市| 瑞安市| 宁晋县| 乌兰浩特市| 得荣县| 观塘区| 石林|