RBAC在CSD下的參考實現
序言:
權限模塊是MIS係統中不可或缺的重要組成。員工在進行正常的訪問前,服務器往往都需要認證員工的身份。確認員工是否授權,也就是進行訪問控製。訪問控製管理允許被授權的主體(個體或團體組織)對某些資源的訪問,同時拒絕向非授權的主體提供服務。權限模塊的邏輯模型一般形式如下:
誰(員工/角色)對什麼(應用模塊)是否具有某種操作的授權(授權狀態:grant、deny、revoke等)。即who + what + how操作模型。
目前業界比較流行的授權模型有RBAC、ACL等。本文主要闡述CSD權限控製模塊的邏輯組成,童鞋們可以根據項目的實際情況和具體架構,在可維護性、靈活性、完整性等方麵對目前的權限模型進行自己的靈活定製。
1. 什麼是RBAC?
關於訪問控製,人們提出了各種保護數據並加以控製的安全模型,如自主訪問控製(Discretionary Access Control,DAC)、強製訪問控製(MandatoryAccess Control,MAC),它們通常都是基於員工-組的安全模型。而RBAC(Role-Based Access Control)具有簡化管理的優越性,它更適合大型係統的管理應用。訪問控製策略體現在RBAC模型裏是員工-角色、角色-權限和角色-角色之間的關係。NIST(National Institute ofStandards and Technology)製定的RBAC模型體係由4個模型組成,分別是基本模型RBAC0,角色分級模型RBAC1,角色限製模型RBAC2和統一模型RBAC3。
2. RBAC模型體係簡介
2.1. RBAC0
(1). U:表示用戶集;R:表示角色集;P:表示權限集;S:表示會話集:
(2). PR:P×R,是權限到角色的多對多指派:
(3). UA:U×R,是用戶到角色的多對多指派:
(4). SU:S→U,會話和用戶的單一映射,user(sn)表示創建會話sn的用戶;
(5). SR:S→R,會話和角色子集的映射,roles(sn)表示會話sn對應的角色集合;
(6). 會話sn具有的權限集 P(sn)。
2.2. RBAC1 & RBAC2
RBAC1引入角色繼承關係,(一般繼承關係,受限繼承關係),RBAC2模型增加了責任分離關係,它規定了角色被授予員工,或者權限被授予角色時,以及當員工在某一時刻激活某一角色時,所應遵循的強製性規則。
2.3. RBAC3
RBAC3包含了RBAC1和RBAC2,既提供了角色間的繼承關係,又提供了責任分離關係
3.RBAC模型的實現
這裏,主要從授權模型和權限校驗兩部分來討論實現思路。
3.1 授權模型
建立如下授權模型:

下麵,針對授權模型中的幾個關鍵部分進行一下描述:
A. 授權
按照RBAC模型,在授權時分為配置資源以及資源的操作、授予角色對資源的操作權限,分配角色給員工這幾步來完成,其中:
a. 資源配置以及資源的操作需要維護資源與資源操作之間的關聯模型。
b. 授予角色對資源的的操作權限需要維護資源與角色之間的關聯模型。
c. 分配角色給員工需要維護角色與員工之間的關聯模型。
d. 權限的繼承通過角色的自關聯完成,即角色可擁有子角色,子角色繼承父角色的權限
B. 權限的排斥與包含
權限的排斥與包含,是通過在資源的操作權限模型中,增加自關聯模型以及定義哪些資源的操作權限是排斥和包含的,在授權時可以看到同樣需要維護的隻是資源權限的自關聯模型。
3.2 資源權限校驗
根據上麵的授權模型,在作資源權限校驗的時候需要經過以下幾個步驟:
A. 判斷員工所在的角色是否擁有對資源進行操作的權限;
B. 遞歸遍曆員工所在角色的父角色,判斷是否擁有對資源進行操作的權限;
備注:整個過程是一個遞歸過程,當遍曆員工本身的角色找不到相應的操作權限時,開始進行父類角色的遞歸查找。可以看出,它和JVM加載class前進行唯一加載判斷的法則有著一致的順序:自底向下判斷是否加載過(是否具有操作權限)。
C. 數據權限的校驗
RBAC模型將數據映射為RBAC中的資源,對數據的操作則映射為資源的操作,然後將此資源以及資源的操作構成的權限授予角色,將角色分配給員工完成數據權限的授權過程。
備注:該模型包含數據權限的繼承(自關聯資源模型),數據權限授予主體的多樣性。
4.CSD的權限控製模型
CSD權限控製引入了員工和組織機構之間的關聯模型,但角色之間的簡單繼承關係帶來了大量的數據冗餘,下麵是CSD的權限控製ER模型:
備注:
涉及到的數據表如下:
APP_USER:登錄用戶相關信息
APP_ROLE:係統角色表
APP_PERMISSION:係統權限表
APP_ORG:組織信息表
APP_ROLE_PERMISSION:角色和權限對應表
APP_USER_ROLE_ORG:用戶在組織中具有的角色信息表
最後更新:2017-04-02 22:16:36