RBAC 权限模型梳理
本文最后更新于 2025年7月28日 11:41
什么是 RBAC 权限模型
RBAC(Role-Based Access Control)即:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。RBAC 认为权限的过程可以抽象概括为:判断 Who 是否可以对 What 进行 How 的访问操作
这个逻辑表达式的值是否为 True 的求解过程,即将权限问题转换为Who、What、How的问题。Who、What、How构成了访问权限三元组。
RBAC 支持的安全原则
RBAC支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则
- 最小权限原则:RBAC可以将角色配置成其完成任务所需的最小权限集合
- 责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务,例如要求一个计账员和财务管理员共同参与统一过账操作
- 数据抽象原则:可以通过权限的抽象来体现,例如财务操作用借款、存款等抽象权限,而不是使用典型的读、写、执行权限
RBAC 的三种模型
RBAC 0
在该模型中,用户和角色之间可以是多对多的关系,即一个用户在不同场景下是可以有不同的角色,例如:项目经理也可能是组长也可能是架构师。同时每个角色都至少有一个权限。这种模型下,用户和权限被分离独立开来,使得权限的授权认证更加灵活。
RBAC 1
基于 RBAC 0 模型引入了角色间的继承关系,即角色上有了上下级的区别。角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。这种模型适合于角色之间层次分明,可以给角色分组分层。
如某个业务部门,有经理、主管、专员。主管的权限不能大于经理,专员的权限不能大于主管,如果采用RBAC 0模型做权限系统,极可能出现分配权限失误,最终出现主管拥有但经理没有的权限的情况。
RBAC 2
基于 RBAC 0 模型引入了角色的访问控制。RBAC 2 中的一个基本限制是互斥角色的限制,互斥角色是指各自权限可以互相制约的两个角色。对于这类角色,一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。
该模型有以下几种约束
- 互斥角色 :同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。示例:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色。
- 基数约束 :一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;一个角色对应的访问权限数目也应受限,以控制高级权限在系统中的分配。例如公司的领导人是有限的。
- 先决条件角色 :可以分配角色给用户,仅当该用户已经是另一角色的成员;对应的,可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。简单来说,要想获得较高的权限,要首先拥有低一级的权限。
- 运行时互斥 :允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。