RBAC權限系統分析、設計與實現

RBAC權限系統分析、設計與實現

最近,因為專案上需要設計實現一個權限管理模組,所以專門整理總結了RBAC的一些知識。

最後更新 2021/2/18 下午4:16
shuwoom.com
預計閱讀 6 分鐘
分類
架構設計
標籤
架構設計

最近,因為專案上需要設計實作一個權限管理模組,所以特別整理總結了 RBAC 的一些知識。

目前,使用最普遍的權限管理模型正是 RBAC(Role-Based Access Control)模型,這篇文章也主要是介紹基於 RBAC 的權限管理系統,我會從 RBAC 是什麼、如何設計 RBAC 兩部分來介紹。

一、RBAC 是什麼

1、RBAC 模型概述

RBAC 模型(Role-Based Access Control:基於角色的存取控制)模型是 20 世紀 90 年代研究出來的一種新模型,但其實在 20 世紀 70 年代的多使用者運算時期,這種思想就已經被提出來,直到 20 世紀 90 年代中後期,RBAC 才在研究團體中得到一些重視,並先後提出了許多類型的 RBAC 模型。其中以美國 George Mason 大學資訊安全技術實驗室(LIST)提出的 RBAC96 模型最具有代表,並得到了普遍的公認。

RBAC 認為權限授權的過程可以抽象地概括為:Who 是否可以對 What 進行 How 的存取操作,並對這個邏輯表達式進行判斷是否為 True 的求解過程,也就是將權限問題轉換為 What、How 的問題,Who、What、How 構成了存取權限三元組,具體的理論可以參考 RBAC96 的論文,這裡我們就不做詳細的展開介紹,大家有個印象即可。

2、RBAC 的組成

在 RBAC 模型裡面,有 3 個基礎組成部分,分別是:使用者、角色和權限。

RBAC 透過定義角色的權限,並對使用者授予某個角色從而來控制使用者的權限,實現了使用者和權限的邏輯分離(區別於 ACL 模型),極大地方便了權限的管理

下面在講解之前,先介紹一些名詞:

  • User(使用者):每個使用者都有唯一的 UID 識別,並被授予不同的角色
  • Role(角色):不同角色具有不同的權限
  • Permission(權限):存取權限
  • 使用者-角色映射:使用者和角色之間的映射關係
  • 角色-權限映射:角色和權限之間的映射

它們之間的關係如下圖所示(使用者、角色、權限關係):

使用者、角色、權限關係

例如下圖,管理員和普通使用者被授予不同的權限,普通使用者只能去修改和檢視個人資訊,而不能建立使用者和凍結使用者,而管理員由於被授予所有權限,所以可以做所有操作。

例如下圖(角色操作範例),管理員和普通使用者被授予不同的權限,普通使用者只能去修改和檢視個人資訊,而不能建立使用者和凍結使用者,而管理員由於被授予所有權限,所以可以做所有操作。

角色操作範例

3、RBAC 支援的安全原則

RBAC 支援三個著名的安全原則:最小權限原則、責任分離原則和資料抽象原則

  • 最小權限原則:RBAC 可以將角色配置成其完成任務所需的最小權限集合
  • 責任分離原則:可以透過調用相互獨立互斥的角色來共同完成敏感的任務,例如要求一個計帳員和財務管理員共同參與統一過帳操作
  • 資料抽象原則:可以透過權限的抽象來體現,例如財務操作用借款、存款等抽象權限,而不是使用典型的讀、寫、執行權限

4、RBAC 的優缺點

(1)優點:

  • 簡化了使用者和權限的關係
  • 易擴展、易維護

(2)缺點:

RBAC 模型沒有提供操作順序的控制機制,這一缺陷使得 RBAC 模型很難適應那些對操作次序有嚴格要求的系統

5、RBAC 的 3 種模型

(1)RBAC0

RBAC0,是最簡單、最原始的實現方式,也是其他 RBAC 模型的基礎。

RBAC0

在該模型中,使用者和角色之間可以是多對多的關係,即一個使用者在不同場景下是可以有不同的角色,例如:專案經理也可能是組長也可能是架構師。同時每個角色都至少有一個權限。這種模型下,使用者和權限被分離獨立開來,使得權限的授權認證更加靈活。

(2)RBAC1

基於 RBAC0 模型,引入了角色間的繼承關係,即角色上有了上下級的區別。

RBAC1

角色間的繼承關係可分為一般繼承關係和受限繼承關係。一般繼承關係僅要求角色繼承關係是一個絕對偏序關係,允許角色間的多繼承。而受限繼承關係則進一步要求角色繼承關係是一個樹結構,實現角色間的單繼承。

這種模型適合於角色之間層次分明,可以給角色分組分層。

(3)RBAC2

RBAC2,基於 RBAC0 模型的基礎上,進行了角色的存取控制。

RBAC2

RBAC2 中的一個基本限制是互斥角色的限制,互斥角色是指各自權限可以互相制約的兩個角色。對於這類角色一個使用者在某一次活動中只能被分配其中的一個角色,不能同時獲得兩個角色的使用權。

該模型有以下幾種約束:

  • 互斥角色 :同一使用者只能分配到一組互斥角色集合中至多一個角色,支援責任分離的原則。互斥角色是指各自權限互相制約的兩個角色。對於這類角色一個使用者在某一次活動中只能被分配其中的一個角色,不能同時獲得兩個角色的使用權。常舉的例子:在審計活動中,一個角色不能同時被指派給會計角色和審計員角色。
  • 基數約束 :一個角色被分配的使用者數量受限;一個使用者可擁有的角色數目受限;同樣一個角色對應的存取權限數目也應受限,以控制高級權限在系統中的分配。例如公司的領導人有限的;
  • 先決條件角色 :可以分配角色給使用者僅當該使用者已經是另一角色的成員;對應的可以分配存取權限給角色,僅當該角色已經擁有另一種存取權限。指要想獲得較高的權限,要首先擁有低一級的權限。就像我們生活中,國家主席是從副主席中選舉的一樣。
  • 運行時互斥 :例如,允許一個使用者具有兩個角色的成員資格,但在運行中不可同時啟動這兩個角色。

二、如何設計 RBAC

這一節,我會介紹設計基於 RBAC 模型的權限系統的功能模組組成、流程以及資料庫的設計。

1、RBAC 的功能模組

RBAC模組功能

2、RBAC 執行流程

RBAC流程

3、RBAC 資料庫設計

RBAC資料庫設計

繼續探索

延伸閱讀

更多文章