RBAC权限模型

本文深入探讨了基于角色的访问控制(RBAC)模型,详细介绍了RBAC的四种级别(RBAC0、RBAC1、RBAC2、RBAC3),分析了其优缺点,并对比了ACL模型。同时,提出了扩展的RBAC设计思路,讨论了角色与用户组的区别。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、简介
 RBAC 是基于角色的访问控制(Role-Based Access Control )在 RBAC 中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。这就极大地简化了权限的管理。这样管理都是层级相互依赖的,权限赋予给角色,而把角色又赋予用户,这样的权限设计很清楚,管理起来很方便。
 RBAC 认为授权实际上是Who 、What 、How 三元组之间的关系,也就是Who 对What 进行How 的操作,也就是“主体”对“客体”的操作。
 Who:是权限的拥有者或主体(如:User,Role)。
 What:是操作或对象(operation,object)。
 How:具体的权限(Privilege,正向授权与负向授权)。

RBAC支持公认的安全原则:最小特权原则、责任分离原则和数据抽象原则。
 1、最小特权原则得到支持,是因为在RBAC模型中可以通过限制分配给角色权限的多少和大小来实现,分配给与某用户对应的角色的权限只要不超过该用户完成其任务的需要就可以了。
 2、责任分离原则的实现,是因为在RBAC模型中可以通过在完成敏感任务过程中分配两个责任上互相约束的两个角色来实现,例如在清查账目时,只需要设置财务管理员和会计两个角色参加就可以了。
 3、数据抽象是借助于抽象许可权这样的概念实现的,如在账目管理活动中,可以使用信用、借方等抽象许可权,而不是使用操作系统提供的读、写、执行等具体的许可权。但RBAC并不强迫实现这些原则,安全管理员可以允许配置RBAC模型使它不支持这些原则。因此,RBAC支持数据抽象的程度与RBAC模型的实现细节有关。

二、分类
RBAC 分为RBAC0、RBAC1、RBAC2、RBAC3 。
 RBAC0:是RBAC的核心思想。完全支持RBAC概念的任何系统的最低需求。
 RBAC1:是把RBAC的角色分层模型。增加了角色分级的概念,一个角色可以从另一个角色继承许可权。
 RBAC2:增加了RBAC的约束模型。增加了一些限制,强调在RBAC的不同组件中在配置方面的一些限制。
 RBAC3:其实是RBAC2 + RBAC1。称为统一模型,它包含了RBAC1和RBAC2,利用传递性,也把RBAC0包括在内。这些模型构成了RBAC96模型族。
1、RBAC0:RBAC的核心。RBAC0的模型中包括用户(U)、角色(R)和许可权(P)等3类实体集合。
在这里插入图片描述
 RBAC0定义了能构成一个RBAC控制系统的最小的元素集合。
 在RBAC之中,包含用户users(USERS)、角色roles(ROLES)、目标objects(OBS)、操作operations(OPS)、许可权permissions(PRMS)五个基本数据元素,此模型指明用户、角色、访问权限和会话之间的关系。
 每个角色至少具备一个权限,每个用户至少扮演一个角色;可以对两个完全不同的角色分配完全相同的访问权限;会话由用户控制,一个用户可以创建会话并激活多个用户角色,从而获取相应的访问权限,用户可以在会话中更改激活角色,并且用户可以主动结束一个会话。
 用户和角色是多对多的关系,表示一个用户在不同的场景下可以拥有不同的角色。例如项目经理也可以是项目架构师等;当然了一个角色可以给多个用户,例如一个项目中有多个组长,多个组员等。
 这里需要提出的是,将用户和许可进行分离,是彼此相互独立,使权限的授权认证更加灵活。角色和许可(权限)是多对多的关系,表示角色可以拥有多分权利,同一个权利可以授给多个角色都是非常容易理解的,想想现实生活中,当官的级别不同的权限的情景,其实这个模型就是对权限这方面的一个抽象,联系生活理解就非常容易了。

2、RBAC1:基于角色的分层模型。基于RBAC0模型,引入角色间的继承关系,即角色上有了上下级的区别,角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。这种模型合适于角色之间的层次明确,包含明确。
在这里插入图片描述
3、RBAC2:是RBAC的约束模型。基于RBAC0模型的基础上,进行了角色的访问控制。
 RBAC2模型中添加了责任分离关系。RBAC2的约束规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。责任分离包括静态责任分离和动态责任分离。约束与用户-角色-权限关系一起决定了RBAC2模型中用户的访问许可,此约束有多种。
 互斥角色 :同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色。
 基数约束 :一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;同样一个角色对应的访问权限数目也应受限,以控制高级权限在系统中的分配。例如公司的领导人有限的;
 先决条件角色 :可以分配角色给用户仅当该用户已经是另一角色的成员;对应的可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。指要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。
 运行时互斥 :例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。
在这里插入图片描述
4、RBAC3:就是RBAC1+RBAC2。也就是最全面级的权限管理,它是基于RBAC0的基础上,将RBAC1和RBAC2进行整合了,最前面,也最复杂的。
在这里插入图片描述
三、RBAC的优缺点
 RBAC模型没有提供操作顺序控制机制。这一缺陷使得RBAC模型很难应用关于那些要求有严格操作次序的实体系统。例如,在购物控制系统中要求系统对购买步骤的控制,在客户未付款之前不应让他把商品拿走。RBAC模型要求把这种控制机制放到模型。

四、实用的RBAC模型的数据库建模
1、扩展RBAC用户角色权限设计方案
 RBAC(Role-Based Access Control,基于角色的访问控制),就是用户通过角色与权限进行关联。简单地说,一个用户拥有若干角色,每一个角色拥有若干权限。这样,就构造成“用户-角色-权限”的授权模型。在这种模型中,用户与角色之间,角色与权限之间,一般者是多对多的关系。
在这里插入图片描述
 角色是什么?可以理解为一定数量的权限的集合,权限的载体。例如:一个论坛系统,“超级管理员”、“版主”都是角色。版主可管理版内的帖子、可管理版内的用户等,这些是权限。要给某个用户授予这些权限,不需要直接将权限授予用户,可将“版主”这个角色赋予该用户。
 当用户的数量非常大时,要给系统每个用户逐一授权(授角色),是件非常烦琐的事情。这时,就需要给用户分组,每个用户组内有多个用户。除了可给用户授权外,还可以给用户组授权。这样一来,用户拥有的所有权限,就是用户个人拥有的权限与该用户所在用户组拥有的权限之和。(下图为用户组、用户与角色三者的关联关系)
在这里插入图片描述
 在应用系统中,权限表现成什么?对功能模块的操作,对上传文件的删改,菜单的访问,甚至页面上某个按钮、某个图片的可见性控制,都可属于权限的范畴。有些权限设计,会把功能操作作为一类,而把文件、菜单、页面元素等作为另一类,这样构成“用户-角色-权限-资源”的授权模型。而在做数据表建模时,可把功能操作和资源统一管理,也就是都直接与权限表进行关联,这样可能更具便捷性和易扩展性。
在这里插入图片描述
 请留意权限表中有一列“权限类型”,我们根据它的取值来区分是哪一类权限,如“MENU”表示菜单的访问权限、“OPERATION”表示功能模块的操作权限、“FILE”表示文件的修改权限、“ELEMENT”表示页面元素的可见性控制等。
 这样设计的好处有二。其一,不需要区分哪些是权限操作,哪些是资源,(实际上,有时候也不好区分,如菜单,把它理解为资源呢还是功能模块权限呢?)。其二,方便扩展,当系统要对新的东西进行权限控制时,我只需要建立一个新的关联表“权限XX关联表”,并确定这类权限的权限类型字符串。 这里要注意的是,权限表与权限菜单关联表、权限菜单关联表与菜单表都是一对一的关系。(文件、页面权限点、功能操作等同理)。也就是每添加一个菜单,就得同时往这三个表中各插入一条记录。这样,可以不需要权限菜单关联表,让权限表与菜单表直接关联,此时,须在权限表中新增一列用来保存菜单的ID,权限表通过“权限类型”和这个ID来区分是种类型下的哪条记录。
 到这里,RBAC权限模型的扩展模型的完整设计图如下:
在这里插入图片描述
 随着系统的日益庞大,为了方便管理,可引入角色组对角色进行分类管理,跟用户组不同,角色组不参与授权。例如:某电网系统的权限管理模块中,角色就是挂在区局下,而区局在这里可当作角色组,它不参于权限分配。另外,为方便上面各主表自身的管理与查找,可采用树型结构,如菜单树、功能树等,当然这些可不需要参于权限分配。

五、角色与用户组区别
 两者的主要差别是:用户组是用户的集合,但不是许可权的集合;而角色却同时具有用户集合和许可权集合的概念,角色的作用把这两个集合联系在一起的中间媒介。
 在一个系统中,如果用户组的许可权和成员仅可以被系统安全员修改的话,在这种机制下,用户组的机制是非常接近于角色的概念的。角色也可以在用户组的基础上实现,这有利于保持原有系统中的控制关系。在这种情况下,角色相当于一个策略部件,与用户组的授权及责任关系相联系,而用户组是实现角色的机制,因此,两者之间是策略与实现机制之间的关系。

六、ACL模型
 访问控制列表,是前几年盛行的一种权限设计,它的核心在于用户直接和权限挂钩。
 RBAC的核心是用户只和角色关联,而角色代表对了权限,这样设计的优势在于使得对用户而言,只需角色即可以,而某角色可以拥有各种各样的权限并可继承。
 ACL和RBAC相比缺点在于由于用户和权限直接挂钩,导致在授予时的复杂性,虽然可以利用组来简化这个复杂性,但仍然会导致系统不好理解,而且在取出判断用户是否有该权限时比较的困难,一定程度上影响了效率。

七、基于RBAC模型的框架
 1、Apache Shiro
 2、spring Security

### RBAC权限模型概念 RBAC(Role-Based Access Control),即基于角色的访问控制,是一种用于管理用户对资源访问权限的方法。其核心思想在于通过定义角色来间接分配权限给用户,从而简化复杂的权限管理系统[^1]。 在RBAC模型中,“Who”表示用户,“What”代表资源,“How”则指代操作行为。这三者共同构成了一种访问权限三元组关系:“谁能够对什么执行何种操作”。这种机制使得权限管理和分配更加灵活且易于维护[^3]。 --- ### RBAC权限模型实现原理 #### 1. 用户与角色关联 用户被赋予一个或多个角色,而这些角色决定了该用户可以访问哪些资源以及能对其进行什么样的操作。例如,在企业系统中,管理员可能拥有“超级管理员”的角色,而普通员工仅具有“查看员”的角色[^4]。 #### 2. 角色与权限绑定 每个角色都对应一组特定的权限集合。当某个用户被授予某一角色时,他便自动获得了与此角色相关联的所有权限。这种方式减少了直接为每位单独设置复杂权限的需求。 #### 3. 资源保护 对于受控资源而言,只有具备适当权限的角色才能对其实施允许范围内的动作。比如文件夹读取、数据库记录修改等均需经过严格的验证过程以确认当前登录者的身份及其所拥有的权利是否满足条件。 --- ### Java实现RBAC权限模型示例 以下是利用Java语言构建的一个简单版本RBAC框架: ```java // 定义实体类 public class User { private String id; private List<String> roles; // 用户所属角色列表 public boolean hasPermission(String resource, String action){ for (String role : this.roles){ Role r = getRoleById(role); if(r != null && r.isAllowed(resource,action)){ return true; } } return false; } } class Role{ private String name; private Map<String,List<String>> permissions; public boolean isAllowed(String resource,String action){ if(this.permissions.containsKey(resource)){ List<String> actionsList = this.permissions.get(resource); return actionsList.contains(action); }else{ return false; } } } ``` 上述代码片段展示了如何判断某位用户是否有权针对指定资源执行特定行动的功能逻辑。 --- ### 小结 综上所述,RBAC不仅提供了一个清晰明了的方式来描述并处理安全需求,而且还能有效降低因频繁更改个人级别设定所带来的错误风险。它广泛应用于各类信息系统当中,成为现代软件开发不可或缺的一部分[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值