权限系统模型: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,一经查实,立即删除!

相关文章

编程探秘:Python深渊之旅-----深入 Python 脚本(三)

随着项目的发展,自动化某些重复性任务成为提高效率的关键。派超和瑞宝开始探索 Python 脚本的强大功能,以简化他们的工作。 派超(兴奋地):听说 Python 脚本可以帮我们自动化许多枯燥的任务,是真的吗&#…

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…

luogu【深基4.习9】打分

【深基4.习9】打分 题目描述 现在有 n ( n ≤ 1000 ) n(n \le 1000) n(n≤1000) 位评委给选手打分,分值从 0 0 0 到 10 10 10。需要去掉一个最高分,去掉一个最低分(如果有多个最高或者最低分,也只需要去掉一个)&a…

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…

LVGL 8.x适配嵌入式Linux的Framebuffer

LVGL 8.x适配Linux的Framebuffer 文章目录 LVGL 8.x适配Linux的Framebuffer1、硬件准备2、软件配置3、LVGL配置与编译在前面的文章中,我们对TFT LCD进行了Framebuffer驱动适配,本文将在该基础上,对LVGL8 进行适配。 1、硬件准备 Raspberry Pi Zero W开发板一个(镜像Linux内…

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工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒体系统工程师系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只…

uniapp中为什么会出现跨域问题,如何解决

在uniapp中&#xff0c;跨域问题通常是由于浏览器的同源策略引起的。同源策略要求请求的域名、协议、端口都必须一致&#xff0c;否则会产生跨域问题。 解决跨域问题有以下几种方法&#xff1a; 在后端服务器上配置跨域资源共享&#xff08;CORS&#xff09;&#xff1a;在服务…

【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;下面就以…

如何正确了解应用高防IP

一、简介 随着互联网的快速发展&#xff0c;网络安全问题逐渐凸显。高防IP作为一项重要的网络安全服务&#xff0c;已经成为了守护网络安全的重要一环。高防IP通过提供强大的抗DDoS攻击能力和其他网络安全防护措施&#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;这次…