RBAC简介(*)

2023-11-14

一.RBAC是什么

1.RBAC模型概述
RBAC是Role Based Access Control的英文缩写,意思是 基于角色的访问控制。
RBAC实际上就是针对产品去挖掘需求时所用到的Who(角色)、What(拥有什么资源)、How(有哪些操作)的方式。
在RBAC模型中,who、what、how构成了访问权限三元组,也就是“Who对What进行How的操作。
RBAC主要包含四个子模型:RBAC0、RBAC1、RBAC2和RBAC3,整体又叫做RBAC96。
在这里插入图片描述
RBAC0
RBAC0是RBAC96模型家族中的基础,也称作核心部分,RBAC1、RBAC2和RBAC3是在此基础之上发展演变而来的。

可以理解它是由四个部分组成的:用户、角色、会话、权限
这就导致了这种分配关系是多对多:用户对应多个角色、角色对应多个权限。
用户与会话一对一,会话与角色一对多。

RBAC1
RBAC1是在RBAC0模型基础上增加了角色分层概念和角色之间的继承关系。

角色分层指的是同一个角色可以有不同等级,不同等级又对应着不同的权限;
角色继承关系指的是子角色可以对父角色的权限进行继承,但是子角色的权限一定小于父角色。

RBAC2
RBAC2是在RBAC0模型基础上增加了角色约束,主要约束哪些操作是可进行的,哪些是不可进行的。

主要约束有以下三个方面:

  • 角色互斥约束:是指在系统运行中,只可以同时激活运行时互斥角色集合中的一个角色;
  • 角色基数约束:是限制某一个用户最多被分配或者激活的角色数目,或者限制某一个角色最多被赋予的权限数目;
  • 先决条件角色约束:是指某些用户只有在己经拥有特定角色的前提下,才能被分配到某种角色,或者某种角色只有在已经被分配到特定权限的前提下,才能被赋予某些权限

RBAC3
RBAC3则是集聚了RBAC1和RBAC2的全部特点,同时将角色继承关系和约束条件关系两者都融入到模型中。

2.RBAC的组成
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。

RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地方便了权限的管理。

下面在讲解之前,先介绍一些名词:

  • User(用户):每个用户都有唯一的UID识别,并被授予不同的角色
  • Role(角色):不同角色具有不同的权限
  • Permission(权限):访问权限
  • 用户-角色映射:用户和角色之间的映射关系
  • 角色-权限映射:角色和权限之间的映射

它们之间的关系如下图所示:
在这里插入图片描述
例如下图,管理员和普通用户被授予不同的权限,普通用户只能去修改和查看个人信息,而不能创建用户和冻结用户,而管理员由于被授予所有权限,所以可以做所有的操作。
在这里插入图片描述
3.RBAC支持的安全原则
RBAC支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则

  • 最小权限原则:RBAC可以将角色配置成其完成任务所需的最小权限集合
  • 责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务,例如要求一个计账员和财务管理员共同参与统一过账操作
  • 数据抽象原则:可以通过权限的抽象来体现,例如财务操作 用借款、存款等抽象权限,而不是使用典型的读、写、执行权限。

4.RBAC的优缺点
(1)优点:

  • 简化了用户和权限的关系
  • 易扩展、易维护

(2)缺点:

  • RBAC模型没有提供操作顺序的控制机制,这一缺陷使得RBAC模型很难适应那些对操作次序有严格要求的系统

5.RBAC的3种模型
(1)RBAC0
RBAC0,是最简单、最原始的实现方式,也是其他RBAC模型的基础。
在这里插入图片描述
在该模型中,用户和角色之间可以是多对多的关系,即一个用户在不同场景下可以有不同的角色,例如:项目经理可能是组长也可能是架构师。同时每个角色都至少有一个权限。这种模型下,用户和权限被分离独立开来,使得权限的授权认证更加灵活。

(2)RBAC1
基于RBAC0模型,引入了角色间的继承关系,即角色上有了上下级的区别。
在这里插入图片描述
角色间的继承关系可分为一般继承关系和受限继承关系。一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。
这种模型适合于角色之间层次分明,可以给角色分组分层。

(3)RBAC2
RBAC2,基于RBAC0模型的基础上,进行了角色的访问控制。
在这里插入图片描述
RBAC2中的一个基本限制是互斥角色的限制,互斥角色是指各自权限可以互相制约的两个角色。对于这类角色,一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。

该模型有以下几种约束:

  • 互斥角色:同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。互斥角色是指各自权限互相制约的两个角色。对于这类角色一个用户在某一次活动中只能被分配其中的一个角色,不能同时获得两个角色的使用权。常举的例子:在审计活动中,一个角色不能同时被指派给会计角色和审计员角色。
  • 基数约束:一个角色被分配的用户数量受限;一个用户可拥有的角色数目受限;同样一个角色对应的访问权限数目也应受限,以控制高级权限在系统中的分配。例如公司的领导人是有限的;
  • 先决条件角色:可以分配角色给用户仅当该用户已经是另一角色的成员;对应的可以分配访问权限给角色,仅当该角色已经拥有另一种访问权限。指 要想获得较高的权限,要首先拥有低一级的权限。就像我们生活中,国家主席是从副主席中选举的一样。
  • 运行时互斥 :例如,允许一个用户具有两个角色的成员资格,但在运行中不可同时激活这两个角色。

二.如何设计RBAC

这一节,我会介绍设计基于RBAC模型的权限系统的功能模块组成、流程以及数据库的设计。
1、RBAC的功能模块
在这里插入图片描述

2、RBAC执行流程
在这里插入图片描述
3、RBAC数据库设计
在这里插入图片描述
三.完整的权限设计
很多人都知道以角色为基础的权限管理设计(RBAC),但是大部分人似懂非懂,不知道完整的权限管理系统都包括哪些内容。

在此以权限管理的使用场景来说明一下完整的权限管理内容。

1.一是鉴权管理,即权限判断逻辑。
(1)最基本的权限管理就是菜单管理,用户没有权限的功能模块在菜单节点上是不显示的。(很多人以为这就是权限管理!)

示例:普通业务人员登录系统后,是看不到【用户管理】菜单的。

(2)功能权限管理,B/S系统的功能体现为URL,所以功能权限管理主要是针对URL访问的管理。(很多人都不清楚权限管理的对象是什么?)

示例:

经过授权,部门经理可以查看【用户管理】菜单,并查看部门用户信息,但权限设计要求,该部门经理没有添加用户的权限。

所以在访问【添加用户】的功能(URL)时,应该有 没有授权的提示信息。

同时在【用户管理】页面上,【添加用户】的按钮应该灰色显示,不能点击。

(3) 行级权限管理
示例:

论坛管理员,权限设计要求 A能管理论坛 【新闻版块】,不能管理论坛 【技术交流】

此时的权限设计就应该根据论坛的相应ID来判断权限信息。

(4)列级权限管理
示例:

业务权限设计要求,除销售人员以外,其他用户不能看到客户的联系方式信息。

此时的权限设计要判断相应的字段(列)是否可以显示。

(5)组织机构/部门级数据权限管理
示例:

业务权限设计要求,销售一部的人员只能看到本部门的销售订单,销售二部的人员只能看到本部门的销售订单,但销售经理可以同时看到销售一部和销售二部的销售订单。

此时的权限设计就要根据销售订单数据本身的部门属性来做判断。

(6)范围型业务数据权限管理

示例:

大卖场销售人员在下销售订单时,要选择相应的产品所在的仓库信息。

业务权限设计要求,【国美】的销售人员在选择仓库的下拉列表中不能看到【广州仓库】,而【大中电器】的销售人员在选择仓库的下拉列表中不能看到【北京顺义仓库】

2.是授权管理,即权限分配过程。以上的权限管理内容都要通过系统的授权功能来分配给具体的用户,授权功能应该足够灵活。

(1)直接对用户授权,直接分配到用户的权限具有最优先级别。
(2)对用户所属岗位授权,用户所属岗位信息可以看作是一个分组,和角色的作用一样,但是每个用户只能关联一个岗位信息。
(3)对用户所属角色授权,用户所属角色信息可以看作是一个权限分组,每个用户可以关联多个角色。
(4)角色直接关联具体的功能权限(URL),也可以关联负权限,即此角色关联的权限不能使用负权限功能。负权限具有优先级别。
(5)分级授权,系统管理员可以将自己拥有的权限信息授权给其他用户。即可以设置分级管理员和超级管理员。

总结:
rbac就是基于角色的权限控制设计
用户、角色、权限。
基本表:用户表、角色表、用户角色关联表、权限表、角色权限关联表。
用户关联角色,角色关联权限。
(1)一个用户可以属于多个角色,某某既是项目经理,又是架构师。一个角色下也可以有多个用户。用户表和角色表是多对多。
(2)一个角色可以有多个权限。一个权限也可以属于多个角色。角色表和权限表是多对多。
权限分类:访问权限(菜单权限、数据权限)、操作权限
访问权限即用户登录系统后能不能看到。
操作权限即用户登录系统后能不能操作。不能操作可以通过控制前端操作按钮不能点击,或者访问对应功能url,给出提示信息。
一个权限就是一条权限表信息记录。将权限信息记录返回给前端,前端来控制即可。
某用户有什么样的权限就是该用户在权限表中关联了哪些数据信息。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

RBAC简介(*) 的相关文章

随机推荐

  • android停止handler的办法

    在当前活动的onDestroy 方法中添加 handler removeCallbacksAndMessages null
  • unity GC机制简单介绍

    GC全称是garbage collection 即垃圾回收 顾名思义就是一种释放内存垃圾的机制 这种机制主要作用在堆空间上 堆上的变量在存储的时候 主要分为以下几步 1 首先 unity检测是否有足够的闲置内存单元用来存储数据 如果有 则分
  • 【Nginx】初步使用及配置文件

    目录 Nginx 目录结构 Nginx 基本运行原理 Nginx 基础配置 Nginx 与Http协议及多站点配置 Nginx Server名称匹配 FCGI 请求的参数 PHP only required if PHP was built
  • 在 React 中使用 highlight.js 和 Clipboard.js 实现代码高亮和复制功能

    在网页开发中 代码高亮和复制功能是十分常见的需求 为了让界面更加美观 我们通常会使用一些成熟的库来实现这些功能 避免自己手写复杂的代码 而在 React 中 常用的代码高亮库是 highlight js 常用的复制库是 Clipboard
  • 苹果IOS手机设置BurpSuite抓包(详细步骤)

    0 01 添加BP的Proxy Listeners 点击Add添加 端口填写8080 然后选择Specific address 选手机和电脑同时在的那个IP区段 IP具体查询方式使用Win R 输入ipconfig 然后看这个 在Speci
  • python mock库介绍

    python mock库介绍 Mock是什么 Mock这个词在英语中有模拟的这个意思 因此我们可以猜测出这个库的主要功能是模拟一些东西 准确的说 Mock是Python中一个用于支持单元测试的库 它的主要功能是使用mock对象替代掉指定的P
  • 后缀表达式

    include
  • IKD树:激光雷达SLAM中高效的点云数据结构与编程

    IKD树 激光雷达SLAM中高效的点云数据结构与编程 激光雷达同步定位与地图构建 Simultaneous Localization and Mapping SLAM 在机器人领域具有广泛的应用 在实际应用中 激光雷达获取的点云数据往往十分
  • 动态规划:什么是动态规划?

    一 什么是动态规划 动态规划 Dynamic Programming 简称Dp 是一种算法思想 将原 大 问题化解成子问题 再根据子问题的解得出原问题的解 1 1 什么是最优子结构和重复子问题 1 2 什么是状态转移方程 跟最优子结构的关系
  • FinOps 应用入门指南

    入门指南介绍 什么是 FinOps FinOps 是一种云成本管理和优化的解决方案 并为组织 企业 团队提供了系统化的方法论 其中每个人都应该对自己的云资源成本负责 FinOps 是 Finance 和 DevOps 的合成词 强调业务团队
  • EISeg标注环境配置以及使用方式

    一 背景 EISeg官方网站github官网 二 搭建环境 1 创建并激活虚拟环境 conda create n eiseg python 3 8 conda activate eiseg 设置清华源 下载会更快 pip config se
  • 销售订单创建BAPI

    READ TABLE IT OUTPUT INTO WA OUTPUT WITH KEY SEL X IF SY SUBRC NE 0 MESSAGE E000 CL WITH 请选择需要创建的数据 ENDIF gt 表头 DATA GS
  • Mybatis中实现批量更新的几种方式

    一 概述 mybatis中实现批量插入是很简单的 相比大家都知道 这里就不赘述 本文主要讲述如何实现批量更新 下面介绍本文要讲的几种方式主要是在xml中实现 不包含需要改动代码逻辑的方法 这里 除了网上说的普通情况 还有适合mysql和or
  • Windows系统MySQL5.7.26 版本的下载,安装、卸载

    MySQL5 7版本的下载 安装 使用 下载 Mysql基本参数配置 初始化 安装 下载 官网地址 https dev mysql com downloads mysql 下载到相应目录 这里我放在C data bank 下载到此目录里后
  • 工业相机与镜头选型方法(含实例)

    一 相机介绍及选型方法 1 工业相机介绍 工业相机与我们手机上面的相机或者我们单反相机不同 工业相机它能够使用各种恶劣的工作环境 比如说高温 高压 高尘等 工业相机主要有面阵相机和线阵相机 线阵相机主要用于检测精度要求很高 运动速度很快的场
  • Python中的groupby分组

    写在前面 之前我对于groupby一直都小看了 而且感觉理解得不彻底 虽然在另外一篇文章中也提到groupby的用法 但是这篇文章想着重地分析一下 并能从自己的角度分析一下groupby这个好东西 OUTLINE 根据表本身的某一列或多列内
  • jq中的css样式如何写,jq怎么写css样式

    方法如下 一般要在页面初始化的时候就要加载样式 所以使用ready 方法 语法格式为 document ready function 当DOM已经加载 并且页面 包括图像 已经完全呈现时 会发生ready事件 本教程操作环境 windows
  • centos7 安装frp内网穿透

    一 安装服务端 找一台云服务器 下载frp wget https github com fatedier frp releases download v0 35 1 frp 0 35 1 linux amd64 tar gz 解压 tar
  • 医学图像识别:基于cnn的病变细胞识别 完整代码数据 视频讲解

    项目代码讲解请看视频 医学图像识别 基于cnn的病变细胞识别 哔哩哔哩 bilibili 结果 from keras preprocessing image import ImageDataGenerator load img img to
  • RBAC简介(*)

    一 RBAC是什么 1 RBAC模型概述 RBAC是Role Based Access Control的英文缩写 意思是 基于角色的访问控制 RBAC实际上就是针对产品去挖掘需求时所用到的Who 角色 What 拥有什么资源 How 有哪些