隨筆-9  評論-168  文章-266  trackbacks-0

                  基于角色的訪問控制(Role-Based Access Control)作為傳統訪問控制(自主訪問,強制訪問)的有前景的代替受到廣泛的關注。在RBAC中,權限與角色相關聯,用戶通過成為適當角色的成員而得到這些角色的權限。這就極大地簡化了權限的管理。在一個組織中,角色是為了完成各種工作而創造,用戶則依據它的責任和資格來被指派相應的角色,用戶可以很容易地從一個角色被指派到另一個角色。角色可依新的需求和系統的合并而賦予新的權限,而權限也可根據需要而從某角色中回收。角色與角色的關系可以建立起來以囊括更廣泛的客觀情況。

          RBAC認為權限授權實際上是Who、What、How的問題。在RBAC模型中,who、what、how構成了訪問權限三元組,也就是“Who對What(Which)進行How的操作”。   
          Who:權限的擁用者或主體(如Principal、User、Group、Role、Actor等等)   
          What:權限針對的對象或資源(Resource、Class)。   
          How:具體的權限(Privilege,正向授權與負向授權)。   Operator:操作。表明對What的How操作。也就是Privilege+Resource   
          Role:角色,一定數量的權限的集合。權限分配的單位與載體,目的是隔離User與Privilege的邏輯關系.   
          Group:用戶組,權限分配的單位與載體。權限不考慮分配給特定的用戶而給組。組可以包括組(以實現權限的繼承),也可以包含用戶,組內用戶繼承組的權     限。User與Group是多對多的關系。Group可以層次化,以滿足不同層級權限控制的要求。   
          RBAC的關注點在于Role和User, Permission的關系。稱為User assignment(UA)和Permission assignment(PA).關系的左右兩邊都是Many-to-Many關系。就是user可以有多個role,role可以包括多個user。   
          凡是用過RDBMS都知道,n:m 的關系需要一個中間表來保存兩個表的關系。這UA和PA就相當于中間表。事實上,整個RBAC都是基于關系模型。   Session在RBAC中是比較隱晦的一個元素。標準上說:每個Session是一個映射,一個用戶到多個role的映射。當一個用戶激活他所有角色的一個子集的時候,建立一個session。每個Session和單個的user關聯,并且每個User可以關聯到一或多個Session.   
          在RBAC系統中,User實際上是在扮演角色(Role),可以用Actor來取代User,這個想法來自于Business Modeling With UML一書Actor-Role模式。考慮到多人可以有相同權限,RBAC引入了Group的概念。Group同樣也看作是Actor。而User的概念就具象到一個人。   
          這里的Group和GBAC(Group-Based Access Control)中的Group(組)不同。GBAC多用于操作系統中。其中的Group直接和權限相關聯,實際上RBAC也借鑒了一些GBAC的概念。   
          Group和User都和組織機構有關,但不是組織機構。二者在概念上是不同的。組織機構是物理存在的公司結構的抽象模型,包括部門,人,職位等等,而權限模型是對抽象概念描述。組織結構一般用Martin fowler的Party或責任模式來建模。   
          Party模式中的Person和User的關系,是每個Person可以對應到一個User,但可能不是所有的User都有對應的Person。Party中的部門Department或組織Organization,都可以對應到Group。反之Group未必對應一個實際的機構。例如,可以有副經理這個Group,這是多人有相同職責。   
          引入Group這個概念,除了用來解決多人相同角色問題外,還用以解決組織機構的另一種授權問題:例如,A部門的新聞我希望所有的A部門的人都能看。有了這樣一個A部門對應的Group,就可直接授權給這個Group。
          posted on 2011-02-10 10:29 紫蝶∏飛揚↗ 閱讀(2458) 評論(0)  編輯  收藏 所屬分類: 隨想JAVASpring Security
          主站蜘蛛池模板: 灵宝市| 信宜市| 九龙县| 乌海市| 武乡县| 习水县| 喀喇沁旗| 香港| 霞浦县| 英吉沙县| 昌乐县| 治多县| 正定县| 长汀县| 确山县| 永安市| 建德市| 吉安县| 绩溪县| 托克托县| 汪清县| 吉木乃县| 玛曲县| 蒲江县| 安陆市| 长春市| 和平区| 洪雅县| 上犹县| 奎屯市| 公安县| 襄汾县| 饶平县| 法库县| 东方市| 城步| 泰州市| 宝丰县| 库车县| 海安县| 南阳市|