权限系统模型:RBAC模型与ABAC模型

权限系统

基于角色的访问控制(RBAC

基于角色的控制访问(Role-Based Access Control,简称 RBAC),即:给予该账号角色(Role),授权角色对应的相关权限,实现了灵活的访问控制,相比直接授予用户权限,更加简单、高效、可扩展。

如下图:

img

图片来源自:Apache Directory

当使用RBAC模型时,需要分析该用户的具体使用情况,确认他的职责以及需求,然后基于共同的职责及需求分配不同的角色,属于一种用户->角色->权限的关系,这样的话就可以减去操作单个用户权限的繁琐操作,用户直接从角色中获取所需要的权限。

通过RBAC模型,当存在多个用户存在相同权限时,只需要创建好与权限相对应的角色即可,分配给这一批用户,以后修改角色的权限,就会自动的修改角色内的所有用户的权限。

例如数据库:MongoDB便是采用的RBAC模型,对数据库的操作都划分成了权限(MongoDB权限文档)

权限标识权限说明
find具有此权限的用户可以运行所有和查询有关的命令,如:aggregate、checkShardingIndex、count等。
insert具有此权限的用户可以运行所有和新建数据有关的命令:insert和create等。
collStats具有此权限的用户可以对指定database或collection执行collStats命令。
viewRole具有此权限的用户可以查看指定database的角色信息。

基于这些权限,MongoDB提供了一些预定义的角色(MongoDB预定义角色文档,而且你还可以进行自定义角色):

角色findinsertcollStatsviewRole
read
readWrite
dbAdmin
userAdmin

最后授予用户不同的角色,就可以实现不同粒度的权限划分。

以上基本上RBAC模型的核心设计(RBAC Core)。而基于核心概念之上,RBAC规范了还提供了扩展模式。

角色继承(Hierarchical Role

img

带有角色继承的RBAC,图片来源自:Apache Directory

听到继承,我会想到Java中的继承,感觉其实RBAC中的继承和Java中的也是大差不差的。在RBAC中,角色可以继承于其他角色,这样就会拥有其他角色权限,而且还可以关联额外的权限。这种设计可以给角色分组和分层,一定程度简化 了权限的管理工作。我个人对此的比如我有上级AB,上级A是上级B的上级,如果他们职责几乎完全相同,那么上级A一定会有上级B的权限,这样可以理解为上级A继承于上级B,这样就会拥有他的所有权限,然后根据自己的身份再确定额外的权限。

职责分离(Separation of Duty

为了避免用户拥有过多权限而产生的冲突,比如一个球员同时拥有裁判的权限,那么在比赛的时候不无敌了,另一种职责分离扩展版的RBAC被提出。

职责分离有两种模式:

  • 静态职责分离(Static Separation of Duty):即用户不能被赋予有冲突的角色,比如球员和裁判。

img

静态职责分离,图片来源自Apache Directory

  • 动态职责分离(Dynamic Separation of Duty):用户在一次会话中,不能同时激活自身所拥有的所拥有的、互相有冲突的角色,只能选择其一,比如在足球比赛中,你只能选择球员或者裁判其中一种身份。

img

动态职责分离,图片来自Apache Directory

基于属性的访问控制(ABAC

基于属性的控制访问(Attribute-Based Access Control,简称 ABAC)是一种比RBAC模型更加灵活的授权模型,即:通过各种属性来动态判断某个操作是否被允许。这个模型在云系统中使用的比较多,例如AWS,阿里云等。

考虑下面场景的权限控制:

  1. 授权某个人可以编辑某篇文章的权限
  2. 开发文档的所属部门与用户的部门相时,用户可以访问这个文档
  3. 公司9:00进行打卡,但有的部门是9:30进行打卡,不允许该部门9:00之前进行打卡
  4. 除了某地区外的用户可以观看到此条视频
  5. 在某某时间前创建的订单,我可以进行操作

可以发现上述厂家很难通过RBAC模型进行一个实现,因为他们没有具体的身份,只能描述该身份可以操作的事物,操作的一些条件和数据是没有办法进行限制的,但上述是某个操作规划了某些条件的权限。但这确实ABAC模型的长处,ABAC模型的思想是基于用户、访问的数据的属性、以及各种环境因素区动态计算用户是否有权限进行操作。

ABAC模型的原理

ABAC模型中,某些操作是否被允许是基于对象、资源、操作和环境信息共同计算决定的。

  • 对象:对象即当前访问的用户。用户的属性包括ID,个人资源,角色,部门和组织成员身份等。
  • 资源:资源即当前用户需要访问的资产或者对象,例如:文件,数据,服务器,API等
  • 操作:操作即用户对资源进行的操作。常见的操作包括“读取”,“写入”,“编辑”,“复制”和“删除”
  • 环境:环境是每个访问请求的上下文。环境属性包含访问的时间,位置,设备,通信协议,加密强度等

转转新权限系统的设计思想

RBAC模型已经满足了大部分的场景业务,开发成本也远低于ABAC模型的权限系统,转转此次新权限系统选择基于RBAC模型来实现。

标准的RBAC模型是完全遵从的用户->角色->权限的链路,也就是用户的权限完全由他所拥有的角色来控制,但是这样给用户加权限的效率比较低,所以转转在RBAC模型的基础商,新增了给用户直接添加权限的能力,个人理解就是在角色的基础上,扩展了一个可以单独加权限的操作。最终用户的权限是根据所拥有角色权限和独立新增权限组合而成。

新权限系统的权限模型:用户最终权限 = 用户拥有的角色带来的权限 + 用户独立配置的权限,两者取并集。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/619400.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

STL篇一:string

文章目录 前言1. STL的简单理解1.1 什么是STL1.2 STL的版本1.3 STL的六大组件1.4 STL的重要性1.5 STL的缺陷 2. string类2.1 为什么学习string类?2.1.1 C语言中的字符串2.1.2 两个面试题 2.2 标准库中的string类2.2.1 string类(了解)2.2.2 string类的常用接口说明 2…

Kafka基本介绍

消息队列 产生背景 消息队列:指的数据在一个容器中,从容器中一端传递到另一端的过程 消息(message): 指的是数据,只不过这个数据存在一定流动状态 队列(queue): 指的容器,可以存储数据,只不过这个容器具备FIFO(先进…

kali_linux换源教程

vim /etc/apt/sources.list #阿里云deb http://mirrors.aliyun.com/kali kali-rolling main non-free contribdeb-src http://mirrors.aliyun.com/kali kali-rolling main non-free contrib#清华大学源deb http://mirrors.tuna.tsinghua.edu.cn/kali kali-rolling main contrib…

Android14实战:打破音频默认重采样的限制(五十二)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

5文件操作

包含头文件<fstream> 操作文件三大类&#xff1a; ofstream : 写文件ifstream &#xff1a;读文件fstream : 读写文件 5.1文本文件 -文件以ascii的形式存储在计算机中 5.1.1写文件 步骤&#xff1a; 包含头文件 #include "fstream"创建流对象 ofs…

【STM32】STM32学习笔记-FlyMCU串口下载和STLINK Utility(30)

00. 目录 文章目录 00. 目录01. 串口简介02. 串口连接电路图03. FlyMCU软件下载程序04. 串口下载原理05. FlyMCU软件其它操作06. STLINK Utility软件07. 软件下载08. 附录 01. 串口简介 串口通讯(Serial Communication)是一种设备间非常常用的串行通讯方式&#xff0c;因为它简…

WebRTC入门:基础的核心协议与概念(二十三)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

【C#】C#实现PDF合并

文章目录 一、下载iTextSharp.dll下载iTextSharp.dll命名空间引入 二、界面设计三、代码全局变量选择文件夹的按钮确认合并的按钮 四、导出结果五、完整源码 一、下载iTextSharp.dll 下载iTextSharp.dll 可使用联机方式或者文件下载方式。 命名空间引入 代码开始时引入了一…

Android Studio导入项目 下载gradle很慢或连接超时

AS最常见的问题之一就是下载gradle非常慢&#xff0c;还经常出现下载失败的情况&#xff0c;没有gradle就无法build项目&#xff0c;所以一定要先解决gradle的下载问题&#xff0c;下面教大家两种常用方法。 因为我的项目绝大多数使用的是gradle-5.6.4-all&#xff0c;下面就以…

【搜索引擎设计:信息搜索怎么避免大海捞针?

在前面我们提到了网页爬虫设计&#xff1a;如何下载千亿级网页&#xff1f;中&#xff0c;我们讨论了大型分布式网络爬虫的架构设计&#xff0c;但是网络爬虫只是从互联网获取信息&#xff0c;海量的互联网信息如何呈现给用户&#xff0c;还需要使用搜索引擎完成。因此&#xf…

MYSQL分表分库 详解

目录 一、垂直拆分于水平拆分的区别&#xff1f; 垂直拆分 水平拆分 二、分表分库有哪些策略&#xff1f; Hash分片策略 枚举分片策略 日期分片策略 范围分片策略&#xff08;用的较多&#xff09; 三、分表分库之后&#xff0c;如何查询的呢&#xff1f; 四、分表分…

【RHEL】Vivado调用VCS+Verdi联合仿真报错解决

问题描述 在使用VCS Verdi仿真Vivado工程时&#xff0c;点击行为仿真按钮进度条窗口消失后&#xff0c;Verdi窗口并未出现&#xff0c;查看消息报错如下&#xff1a; vcs: line 34205: 119837 Segmentation fault (core dumped) ${TOOL_HOME}/bin/cfs_ident_exec -f ${X…

网络安全已死,趁早转行?

近年来&#xff0c;曾经被寄予厚望的网络安全行业似乎正逐渐失去昔日的辉煌。曾经一度备受瞩目的网络安全专业&#xff0c;如今却面临着降薪、裁员的困境。许多公司对网络安全的重视程度不高&#xff0c;网络安全岗位成了背锅的代名词。在这样的环境下&#xff0c;有人开始质疑…

智能小车项目(七)通过PID实现给定和实际速度值计算PWM输出

我们先看大脑&#xff08;上位机nano&#xff09; keybord_ctrl节点发布’cmd_vel’消息消息类型为Twist队列大小为1 pub rospy.Publisher(cmd_vel, Twist, queue_size1)if not stop: pub.publish(twist)driver_node订阅这个消息 当有消息时cmd_vel_callback回掉函数处理消息…

感染嗜肺军团菌是什么感觉?

记录一下最近生病的一次经历吧&#xff0c;可能加我好友的朋友注意到了&#xff0c;前几天我发了个圈&#xff0c;有热心的朋友还专门私信了我说明了他自己的情况和治疗经验&#xff0c;感谢他们。 ​ 那么关于这次生病的经历&#xff0c;给大家分享一下。 首先&#xff0c;这次…

redis夯实之路-持久化之RDB与AOF详解

数据库 初始化服务器时会根据redisServer的dbnum属性来决定创建多少个数据库&#xff0c;默认为16 使用select切换数据库 客服端状态redisClient结构的db属性记录了当前的目标数据库 RedisDb结构的dict字典保存了数据库的所有键值对&#xff0c;这个字典被称为键空间。 cru…

C++I/O流——(2)预定义格式的输入/输出(第二节)

归纳编程学习的感悟&#xff0c; 记录奋斗路上的点滴&#xff0c; 希望能帮到一样刻苦的你&#xff01; 如有不足欢迎指正&#xff01; 共同学习交流&#xff01; &#x1f30e;欢迎各位→点赞 &#x1f44d; 收藏⭐ 留言​&#x1f4dd; 含泪播种的人一定能含笑收获&#xff…

【MySQL】MySQL表的约束-空属性/默认值/列属性/zerofill/主键/自增长/唯一键/外键

文章目录 表的约束1.空属性 --null && not null2.默认值 -- default3.列描述4.zerofill5.主键6.自增长7.唯一键8.外键 表的约束 表的约束&#xff1a;表中一定要有各种约束&#xff0c;通过约束&#xff0c;让我们未来插入数据库表中的数据是符合预期的。约束的本质是…

【QT】多层QTreeWidget与QStackedWidget的关联操作

通过点击多层QTreeWidget来控制QStackedWidget中的page页面切换 treeWidget设计 treeWidget设计&#xff1a; // treeWidget设计ui->treeWidget->clear();ui->treeWidget->setColumnCount(1);//第一层QStringList l;l<<"管理系统";QTreeWid…

iPhone“查找”最多可添加32个物品!

对于那些丢三落四的果粉来说&#xff0c;苹果的“查找”功能是一大福音。不管是丢失了iPhone、iPad、Mac、AirPods还是AirTag&#xff0c;都可以通过“查找”功能在地图上追踪设备的位置&#xff0c;甚至是远程锁定或抹掉设备的数据。 那么&#xff0c;iPhone的查找一次能支持添…