1.什么是 RBAC 呢?
RBAC 即基于角色的權限訪問控制(Role-Based Access Control)。這是一種通過角色關聯權限,角色同時又關聯用戶的授權方式。
簡單地說:一個用戶可以擁有若干角色,每一個角色又可以被分配若干權限,這樣就構造成“用戶-角色-權限”的授權模型。在這種模型中,用戶與角色、角色與權限之間構成了多對多的關系。如下圖:
2.RBAC的組成
在RBAC模型里面,有3個基礎組成部分,分別是:用戶、角色和權限。
RBAC通過定義角色的權限,并對用戶授予某個角色從而來控制用戶的權限,實現了用戶和權限的邏輯分離(區別于ACL模型),極大地方便了權限的管理:
- User(用戶):每個用戶都有唯一的UID識別,并被授予不同的角色
- Role(角色):不同角色具有不同的權限
- Permission(權限):訪問權限
- 用戶-角色映射:用戶和角色之間的映射關系
- 角色-權限映射:角色和權限之間的映射
它們之間的關系如下圖所示:
3.RBAC的優缺點
(1)優點:
- 簡化了用戶和權限的關系
- 易擴展、易維護
(2)缺點:
- RBAC模型沒有提供操作順序的控制機制,這一缺陷使得RBAC模型很難適應哪些對操作次序有嚴格要求的系統
?4.RBAC的3種模型
(1)RBAC0
RBAC0,是最簡單、最原始的實現方式,也是其他RBAC模型的基礎。
在該模型中,用戶和角色之間可以是多對多的關系,即一個用戶在不同場景下是可以有不同的角色,例如:項目經理也可能是組長也可能是架構師。同時每個角色都至少有一個權限。這種模型下,用戶和權限被分離獨立開來,使得權限的授權認證更加靈活。
(2)RBAC1
基于RBAC0模型,引入了角色間的繼承關系,即角色上有了上下級的區別。
角色間的繼承關系可分為一般繼承關系和受限繼承關系。一般繼承關系僅要求角色繼承關系是一個絕對偏序關系,允許角色間的多繼承。而受限繼承關系則進一步要求角色繼承關系是一個樹結構,實現角色間的單繼承。
這種模型適合于角色之間層次分明,可以給角色分組分層。
(3)RBAC2
RBAC2,基于RBAC0模型的基礎上,進行了角色的訪問控制。
RBAC2中的一個基本限制是互斥角色的限制,互斥角色是指各自權限可以互相制約的兩個角色。對于這類角色一個用戶在某一次活動中只能被分配其中的一個角色,不能同時獲得兩個角色的使用權。
該模型有以下幾種約束:
- 互斥角色 :同一用戶只能分配到一組互斥角色集合中至多一個角色,支持責任分離的原則。互斥角色是指各自權限互相制約的兩個角色。對于這類角色一個用戶在某一次活動中只能被分配其中的一個角色,不能同時獲得兩個角色的使用權。常舉的例子:在審計活動中,一個角色不能同時被指派給會計角色和審計員角色。
- 基數約束 :一個角色被分配的用戶數量受限;一個用戶可擁有的角色數目受限;同樣一個角色對應的訪問權限數目也應受限,以控制高級權限在系統中的分配。例如公司的領導人有限的;
- 先決條件角色 :可以分配角色給用戶僅當該用戶已經是另一角色的成員;對應的可以分配訪問權限給角色,僅當該角色已經擁有另一種訪問權限。指要想獲得較高的權限,要首先擁有低一級的權限。就像我們生活中,國家主席是從副主席中選舉的一樣。
- 運行時互斥 :例如,允許一個用戶具有兩個角色的成員資格,但在運行中不可同時激活這兩個角色。
?