許可權管理——RBAC應用
一、許可權管理的訪問控制
許可權管理,一般指控制使用者的訪問許可權,使得使用者可以訪問而且只能訪問自己被授權的資源,不能多也不能少。現在的軟體系統裡基本上都用到了許可權管理,只是控制的粒度、層面和側重點會有所不同,比較完善的許可權管理包括四個方面的訪問控制:
1.功能(最基礎):以使用者完成某一功能為準。如“新增使用者”、“刪除使用者”
2.資料:比功能訪問許可權的控制粒度更小,如“管理員可看到比一般使用者更多的資訊”
3.時間:給訪問許可權新增時間控制,讓訪問的資源在某一時間段中可用。如”12306只能在7:00-23:00時間段內購票“
4.空間:給訪問許可權新增空間控制,根據訪問使用者的空間位置不同,而對使用者的訪問資源進行限制。如”很多人都在問,為什麼在中國上不了facebook……“
二、設計理念
許可權管理的設計理念有很多,像ABAC(基於屬性的訪問控制)、ACL(基於資源的訪問控制)、RBAC(基於資源的訪問控制)、GBAC(基於組的訪問控制)等等,它們各有利弊,現在最常用的是RBAC,理論較完善。
1.基於資源的許可權控制——ACL
ACL(Access Control List)訪問控制列表,是最早也是最基本的一種訪問控制機制,它的許可權控制是圍繞”資源“展開的,即每一項資源,都配有一個列表,這個列表記錄的是哪些使用者可以對這些資源進行哪些操作
這種訪問控制非常簡單,只要把使用者和資源連線起來就行了,但是當用戶和資源增多時,就會產生大量的訪問許可權列表,管理這些訪問控制列表本身就是一件非常繁重的工作,這樣便使得ACL在效能上無法勝任實際應用,所以說效能是硬傷。
2.基於角色的許可權控制——RBAC
RBAC(Role-Based Access Control)基於角色的訪問控制,在這種訪問控制機制中,引入了Role的概念,將使用者與許可權之間的關係進行了解耦,讓使用者通過角色與許可權進行關聯。在RBAC模型中,who、what、how構成了訪問許可權三元組,即”who對what進行how的操作“。
一個使用者可有多種角色,每一種角色擁有多個許可權,在使用者與角色、角色與許可權之間,都是多對多的關係。通過給使用者分配角色,使得使用者擁有對系統的部分使用許可權。在實際設計的過程中,可讓角色和資源直接進行繫結,許可權控制體現在角色與資源的關聯上
角色,是一定數量的許可權集合,也可看成是對擁有相同角色的使用者進行的分類。
3.引入”組“概念的許可權控制——RBAC
這種方案是比較簡單的許可權管理,一般情況下這樣的設計已經足夠了,但是如果要給一組使用者直接分配許可權的話就有問題了,所以又引入了使用者組的概念。
使用者組,是一組使用者的集合,一個使用者組擁有多個許可權。
通過使用者組的啟發,其實我們也可以增加角色組、資源組等等各種組,實現相應的繼承功能。不過這樣就有點繁瑣了,還是用的時候根據實際需求權衡吧。
三、基於RBAC的許可權管理
在上邊的分析中,得出了一種包含使用者、角色、資源、組等幾個主體的許可權管理,它們之間的關聯都是多對多的,由此得到的ER圖如下:
RBAC許可權管理模型在加入”組“概念後,在實現繼承功能的基礎上,更加靈活的適應了需求的變更。它主要的配置為:使用者-角色配置、使用者-使用者組配置,角色-資源配置,使用者組-資源配置,這些配置對應到資料庫中就是兩個主表之間的第三張表,裡邊儲存的是使用者操作的記錄,服務於主表以供查詢。