RBAC是Role-Based Access Control的缩写,意为:基于角色的权限控制。通过角色关联用户,角色关联权限的方式间接赋予用户权限。
如下图:
为什么不直接给用户分配权限,还多此一举的增加角色这一环节呢?
其实是可以直接给用户分配权限,只是直接给用户分配权限,少了一层关系,扩展性弱了许多,适合那些用户数量、角色类型少的平台。
对于通常的系统,比如:存在多个用户拥有相同的权限,在分配的时候就要分别为这几个用户指定相同的权限,修改时也要为这几个用户的权限进行一一修改。有了角色后,我们只需要为该角色制定好权限后,将相同权限的用户都指定为同一个角色即可,便于权限管理。
对于批量的用户权限调整,只需调整用户关联的角色权限,无需对每一个用户都进行权限调整,既大幅提升权限调整的效率,又降低了漏调权限的概率。
RBAC模型可以分为:RBAC0、RBAC1、RBAC2、RBAC3 四种。其中RBAC0是基础,也是最简单的,相当于底层逻辑,RBAC1、RBAC2、RBAC3都是以RBAC0为基础的升级。
一般情况下,使用RBAC0模型就可以满足常规的权限管理系统设计了。
最简单的用户、角色、权限模型。这里面又包含了2种:
- 用户和角色是多对一关系,即:一个用户只充当一种角色,一种角色可以有多个用户担当。
- 用户和角色是多对多关系,即:一个用户可同时充当多种角色,一种角色可以有多个用户担当。
那么,什么时候该使用多对一的权限体系,什么时候又该使用多对多的权限体系呢?
如果系统功能比较单一,使用人员较少,岗位权限相对清晰且确保不会出现兼岗的情况,此时可以考虑用多对一的权限体系。其余情况尽量使用多对多的权限体系,保证系统的可扩展性。如:张三既是行政,也负责财务工作,那张三就同时拥有行政和财务两个角色的权限。
相对于RBAC0模型,增加了子角色,引入了继承概念,即子角色可以继承父角色的所有权限。
使用场景:如某个业务部门,有经理、主管、专员。主管的权限不能大于经理,专员的权限不能大于主管,如果采用RBAC0模型做权限系统,极可能出现分配权限失误,最终出现主管拥有经理都没有的权限的情况。
而RBAC1模型就很好解决了这个问题,创建完经理角色并配置好权限后,主管角色的权限继承经理角色的权限,并且支持在经理权限上删减主管权限。
基于RBAC0模型,增加了对角色的一些限制:角色互斥、基数约束、先决条件角色等。
- 角色互斥:同一用户不能分配到一组互斥角色集合中的多个角色,互斥角色是指权限互相制约的两个角色。案例:财务系统中一个用户不能同时被指派给会计角色和审计员角色。
- 基数约束:一个角色被分配的用户数量受限,它指的是有多少用户能拥有这个角色。例如:一个角色专门为公司CEO创建的,那这个角色的数量是有限的。
- 先决条件角色:指要想获得较高的权限,要首先拥有低一级的权限。例如:先有副总经理权限,才能有总经理权限。
- 运行时互斥:例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。
称为统一模型,它包含了RBAC1和RBAC2,利用传递性,也把RBAC0包括在内,综合了RBAC0、RBAC1和RBAC2的所有特点。
这里结合我的见解,简单的描述下。
RBAC0:是RBAC的核心思想。
RBAC1:是把RBAC的角色分层模型。
RBAC2:增加了RBAC的约束模型。
RBAC3:其实是RBAC2 + RBAC1。
我们已经知道什么是RBAC模型了,在分析怎么来根据此模型来设计权限体系之前,我们再把这个模型要素进行拆分一下。
首先是:用户、角色、权限。
而权限,具体到某个软件来说,实际上包含两个方面。一个是菜单权限,另一个是数据权限。
不同的行业会有不同的使用场景,用户角色权限模型也会有不同程度上的变化。
可以看看这个文章,有相关数据表的设计 :设计一个权限系统-RBAC - 简书 (jianshu.com)
至此,我们可以了解到:RBAC模型实际上能解决大部分的权限设计问题了。
那么,ABAC到底是什么呢?它存在的意义在哪里?关于未来的权限设计趋势,它能带给我们什么启发呢?
带着这些问题,我们先来看看到底什么是ABAC模型。
ABAC,Attribute-based Access Control. 基于属性的访问控制。而属性,总的来说有三类:用户属性、系统或应用被访问属性(数据和操作)、环境属性。
也就是说,系统根据一组或多组属性是否满足预设规则来动态的控制,谁可以访问哪些功能数据和操作。RBAC模型,其实可以看成是静态的、单组属性的ABAC模型。
用例子来理解这个模型就是:只有当用户角色为Admin,在工作时间内,且处在C栋大楼B实验室,才可以访问D文件。
实际上,ABAC是个可以以最细颗粒度来管理权限的模型。它可以让设计者,利用任何一个用户属性、环境属性,或者多个属性之间的交集、并集等来组合出动态的权限判断逻辑。
ABAC 复杂场景下访问控制解决之道。
RBAC与ABAC之间的主要区别在于方法授予访问权限的方式。 RBAC按照角色授予访问权限,ABAC可以根据用户特征,对象特征,操作类型等属性确定访问权限。
优点:
RBAC 模型构建起来更加简单,对于中小型组织,维护角色和授权关系的工作量不大,反而定制各种策略相对麻烦,更容易接受RBAC授权模型。
缺点:
对于大型组织,基于RBCA的控制模型需要维护大量的角色和授权关系,且无法做到对资源细粒度地授权。
优点:
对于大型组织,基于RBCA的控制模型需要维护大量的角色和授权关系,相比而言,ABAC更加灵活。
新增资源时,ABAC仅需要维护较少的资源,而RBAC需要维护所有相关的角色,ABAC可扩展性更强、更方便。
ABAC 有更加细粒度控制和根据上下文动态执行,RBAC只能基于静态的参数进行判断。
缺点
模型构建相对比较复杂。
零信任架构_PolarDay.的博客-CSDN博客_零信任架构物理边界曾经是可信网络和不可信网络之间的有效分割,防火墙通常位于网络的边缘,基于静态策略来控制网络流量。位于防火墙内部的用户会被授予高信任等级来访问企业的敏感资源,因为他们被默认是可信的。但随着业务迁移到云端,APT攻击的泛滥,以及移动办公的趋势,传统的安全边界变的模糊,既然网络和威胁已经发生了变化,我们的防御模型也要跟着变化。零信任是一种安全模型。首先我们要抛弃传统的边界观念,不再依据用户所处的网络位置而决定这个人是否可信。取而代之的是我们对每个请求都进行严格验证信任建立起来之前,网络上的任何资源都是https://blog.csdn.net/shn111/article/details/125195071