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数据库设计

Keep Exploring

延伸阅读

更多文章