关于RBAC的总结-上
1. 什么是RBAC
RBAC,全称是 Role-Based Access Control ,也就是基于角色的访问控制。
RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作,并对这个逻辑表达式进行判断是否为True的求解过程。也即是将权限问题转换为What、How的问题。
Who、What、How构成了访问权限三元组。
2. 为什么需要RBAC
2.1 原始权限控制
在没有RBAC的时候,如果需要对用户授权,则需要直接将权限授予客户,如下图:
张三可以管理商品,同时可以对商品进行审核;
李四只能管理商品,无法审核;
对于这种情况存在以下问题:
- 当用户数量很多的时候,需要对每一个用户执行授权操作;
- 当权限新增或者删除的时候,也是需要每个用户单独执行;
- 当想要快速去除某一部分人的某一部分权限时,操作复杂;
2.2 RBAC
针对传统模式的情况,RBAC通过它的权限三元组进行了解决,如图:
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。
通过增加角色,权限与角色进行关联,同时用户与角色进行关联,来解决上面的问题。
- 当新增用户时,只需要关联角色,即可获得指定的权限;
- 当角色与权限发生变化时,所有关联此角色的用户都会受到影响;
2.3 RBAC的安全原则
- 最小权限原则:RBAC可以将角色配置成其完成任务所需的最小权限集合;
- 责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务;
- 数据抽象原则:可以通过权限的抽象来体现,例如资源操作等抽象权限,而不是使用典型的读、写、执行权限;
3. RBAC模型
3.1 RBAC0
RBAC0其实就是上面举的例子,是最简单的实现方式,也是其他RBAC的基础和核心。
在RBAC0中,用户角色权限三者关系如下图:
一个用户可以关联多个角色,一个角色可以关联多个用户。
一个角色可以关联多个权限,一个权限可以关联多个角色。
即都为多对多的关联关系。
一般这种模型对应的数据库表关系如下:
常见的就是5张表,用户表、角色表、权限表、用户角色关系表、角色权限关系表;
3.2 RBAC1
RBAC1是基于RBAC0模型,引入了角色间的继承关系,即角色上有了上下级的区别。
可以给角色分组分层。
3.3 RBAC2
RBAC2是基于RBAC0模型的基础上,进行了角色的访问控制。
- 比如设置互斥角色,实现责任分离,互斥的角色不能分配给统一用户;
- 比如基数约束,即角色可以分配的用户数量受限,或者角色对权限数目受限等;
3.4 RBAC3
RBAC3其实就是将RBAC1和RBAC2两个模型进行结合。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Liu's Blog!



