最近,因为项目上需要设计实现一个权限管理模块,所以专门整理总结了 RBAC 的一些知识。
目前,使用最普遍的权限管理模型正是 RBAC(Role-Based Access Control)模型,这篇文章也主要是介绍基于 RBAC 的权限管理系统,我会从 RBAC 是什么、如何设计 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 的论文,这里我们就不做详细的展开介绍,大家有个印象即可。
在 RBAC 模型里面,有 3 个基础组成部分,分别是:用户、角色和权限。
RBAC 通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于 ACL 模型),极大地方便了权限的管理
下面在讲解之前,先介绍一些名词:
它们之间的关系如下图所示(用户、角色、权限关系):
例如下图,管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建创建用户和冻结用户,而管理员由于被授 予所有权限,所以可以做所有操作。
例如下图(角色操作示例),管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建用户和冻结用户,而管理员由于被授予所有权限,所以可以做所有操作。
RBAC 支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则
(1)优点:
(2)缺点:
RBAC 模型没有提供操作顺序的控制机制,这一缺陷使得 RBAC 模型很难适应那些对操作次序有严格要求的系统
(1)RBAC0
RBAC0,是最简单、最原始的实现方式,也是其他 RBAC 模型的基础。
在该模型中,用户和角色之间可以是多对多的关系,即一个用户在不同场景下是可以有不同的角色,例如:项目经理也可能是组长也可能是架构师。同时每个角色都至少有一个权限。这种模型下,用户和权限被分离独立开来,使得权限的授权认证更加灵活。
(2)RBAC1
基于 RBAC0 模型,引入了角色间的继承关系,即角色上有了上下级的区别。
角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。
这种模型适合于角色之间层次分明,可以给角色分组分层。
(3)RBAC2
RBAC2,基于 RBAC0 模型的基础上,进行了角色的访问控制。
RBAC2 中的一个基本限制是互斥角色的限制,互斥角色是指各自权限可以互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。
该模型有以下几种约束:
这一节,我会介绍设计基于 RBAC 模型的权限系统的功能模块组成、流程以及数据库的设计。