本文爲轉載學習安全
原文連接:http://hi.baidu.com/boyyf/item/2bc5c8320f7ce4c22e8ec2casession
Role做爲一個用戶(User)與權限(Privilege)的代理層,解耦了權限和用戶的關係,全部的受權應該給予Role而不是直接給User或Group。Privilege是權限顆粒,由Operation和Resource組成,表示對Resource的一個Operation.例如,對於新聞的刪除操做。Role-Privilege是many-to-many的關係,這就是權限的核心。學習
基於角色的訪問控制方法(RBAC)的顯著的兩大特徵是:1.因爲角色/權限之間的變化比角色/用戶關係之間的變化相對要慢得多,減少了受權管理的複雜性,下降管理開銷。2.靈活地支持企業的安全策略,並對企業的變化有很大的伸縮性。spa
RBAC基本概念:操作系統
RBAC認爲權限受權其實是Who、What、How的問題。在RBAC模型中,who、what、how構成了訪問權限三元組,也就是「Who對What(Which)進行How的操做」。代理
Who:權限的擁用者或主體(如Principal、User、Group、Role、Actor等等)對象
What:權限針對的對象或資源(Resource、Class)。繼承
How:具體的權限(Privilege,正向受權與負向受權)。ip
Operator:操做。代表對What的How操做。也就是Privilege+Resourceci
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.