深入理解RBAC
RBAC是一种基于角色实现访问控制的权限管理机制,通过定义角色和权限、用户和角色、角色和角色之间的关系,实现多层次、细粒度、可复用的权限管理系统。原文: Role-based Access Control (RBAC) Model[1]
Avery Pennarun写的"RBAC like it was meant to be[2]非常值得一读。
在web或移动应用中,访问权限控制机制是保证系统安全[3]的重要手段,其中最常见的就是基于角色的访问控制(RBAC, Role-based Access Control)。
基于角色的访问控制是传统访问控制(自主访问[4]、强制访问[5])的一种有前途的替代方案。在RBAC模式下,权限与角色相关联,从而大大简化了对权限的管理。组织为了完成各种任务,从而创建了角色,用户根据职责和技能被分配到相应的角色,也可以从一个角色分配到另一个角色。新角色可以根据新需求和系统集成赋予新的权限,也可以从角色中撤回权限。可以建立角色-角色关系来包含更广泛的客观情况。
访问控制模型
-
访问控制列表(ACL, Access Control List) [6] -
自主访问控制(DAC, Discretionary Access Control) [7] -
强制访问控制(MAC, Mandatory Access Control) [8] -
基于角色的访问控制(RBAC, Role-Based Access Control) [9] -
基于属性的访问控制(ABAC, Attribute-based Access Control) [10] -
基于历史的访问控制(HBAC, History-based Access Control) [11] -
基于身份的访问控制(IBAC, Identity-based Access Control) [12] -
基于组织的访问控制(OrBAC, Organization-based Access Control) [13] -
基于网格的访问控制(LBAC, Lattice-based access control) [14] -
基于上下文的访问控制(CBAC, Context-based Access Control) [15] -
基于实体关系的访问控制(ReBAC, Entity-Relationship-based Access Control) [16] -
扩展基于角色的访问控制(Extended Role-Based Access Control) [17] -
语义访问控制(SAC, Semantic Access Control) [18]
什么是RBAC?
-
通过分配一组与角色关联的权限来提供高级访问 -
支持公认的安全原则: 最小特权原则、责任分离原则和数据抽象原则 -
最小权限原则(The principle of least privilege) — 限制与角色关联的权限的数量和大小 -
职责分离原则(The principle of separation of responsibilities) — 在完成重要任务的过程中,分配一个以上相互约束的角色 -
数据抽象原则(The principle of data abstraction) — 对不同用户的操作提供不同权限的清晰分离 -
不同类型用户可以根据其工作职能和职责获得不同类型的访问权限来履行其职责 -
低级操作人员(例如运维人员)只能查看本部门记录,高级操作人员(例如经理)可以查看和编辑本部门记录
概念
角色(Roles)
-
由许多标准定义,包括权限、职责、成本中心以及业务操作流程。 -
无法通过身份确定角色,权限与角色绑定。 -
角色是围绕访问管理组织的,无论是什么样的活动、身份、职能等,角色可能都不变。
权限(Permissions)
-
权限是一组资源的集合,用户需要批准权限才能使用一组资源对受保护对象执行操作。 -
操作功能模块(添加、删除、更新、编辑、查看、上传),进入菜单,一键进入页面 -
在某些系统设计中,功能操作可以被视为文件、类别、菜单、页面元素、模块、数据、字段等。
User -> Role -> Permissions -> resources
RBAC模型
NIST RBAC96模型是由美国国家标准与技术研究院[19]开发的标准化RBAC定义。
4个基本概念模型:
-
RBACO — 核心RBAC -
RBAC1 — 层次RBAC (RBAC0 + 角色层次结构) -
RBAC2 — 约束RBAC (RBAC0 + 约束) -
RBAC3 — 组合RBAC (RBAC1 + RBAC2)
RBAC授权的过程可以抽象为:
-
谁(Who) — 权限的用户或角色 -
什么(What) — 资源 -
如何(How) — 具体的权限
RBAC0
-
3个元素: 用户、角色和权限 -
设计基于"[多对多(many-to-many)](https://en.wikipedia.org/wiki/Many-to-many_(data_model "多对多(many-to-many "多对多(many-to-many)")"))"关系,即多个用户可以拥有相同的角色,一个用户可以拥有多个角色。
RBAC1
-
4个元素: 用户、角色、权限、层次结构/继承 -
定义了不同角色之间的从属关系 -
高级别角色可以自动从低级别角色获取权限 -
角色之间的继承关系可以分为一般继承关系和有限继承关系 -
一般继承关系只要求角色继承关系是绝对的偏序关系( 角色之间的多重继承) -
有限继承关系要求角色继承关系是树状结构( 角色之间的单一继承)
StackOverflow的Q/A帖子"如何设计基于角色的分层访问控制系统[20]"是一个很好的例子,值得一读。
-
树(Tree) — (自底向上的层次结构) — 树底部的元素被授予更大的权限。 -
倒立树(Inverted Tree) — (自顶向下的层次结构) — 高级角色将其部分权限继承给低级角色,同一级别的节点不共享权限。
-
网格(Grid) — (自底向上和自顶向下的组合) — 每个角色都可以从它下面和上面的节点继承权限,因此相对灵活,可以共享权限。顶级节点被授予更大的权限。
RBAC2
-
4个元素: 用户、角色、权限和约束 -
由于存在利益冲突策略,角色之间的关系存在约束
RBAC3
-
将RBAC1和RBAC2的所有特征(角色继承和约束关系)集成到模型中。 -
可以根据不同的上下文限制或激活可用的用户权限,当用户在会话期间执行的任务可能需要不同级别的访问时,可以在会话期间激活更高级别的权限。
类图
-
User表(用户ID、用户名和其他属性) -
Role表(角色ID,角色名,角色类型) -
User_Role表(用户角色关联表) -
Product表(产品ID,产品类型,渠道,费用,地区) -
Region表(地区代码、渠道) -
Permission表(权限ID、权限类型、权限名称和其他属性) -
Role_permission表(角色权限关联表) -
Menu表(菜单ID,菜单名称,菜单路径URL,父菜单ID,资源和其他属性) -
Page_element表(资源、页面元素ID、页面元素代码和其他属性) -
File表(文件ID,文件名,文件路径) -
Permission_Menu表(权限ID,菜单ID) -
Permission_Element表(权限ID,页面元素ID) -
Permission_File表(权限ID,文件ID) -
Operation表(动作ID、动作名称、动作代码等属性) -
Permission_Operation表(权限ID,操作ID)
RBAC模型的优点
-
降低授权管理的复杂性 -
降低管理成本 -
创建系统级的、可复用的权限分配 -
减少分配用户权限时出错的可能性 -
支持企业安全策略
RBAC模型的缺点
-
不提供操作顺序控制机制
参考文献
History-based access control[21]
Pattern-Oriented Software Architecture - Access control pattern[22]
Role-Based Access Control | CSRC[23]
Role-Based Access Control - Wikipedia[24]
What is Role-Based Access Control (RBAC)? Example, Benefits, and More[25]
What is Role-Based Access Control | RBAC vs ACL vs ABAC | Imperva[26]
Using RBAC Authorization[27]
What is Azure role-based access control (Azure RBAC)?[28]
Role-Based Access Control[29]
RBAC vs ABAC: Make the Right Call | OneLogin[30]
Understanding Role-Based Access Control (RBAC) | StrongDM[31]
What is Role-Based Access Control (RBAC)?[32]
What is Role-Based Access Control (RBAC)?[33]
Role-Based Access Control (RBAC) User Guide | Chronicle Security | Google Cloud[34]
What is Role-Based Access Control (RBAC)? A Complete Guide | Frontegg[35]
Role-Based Access Control (RBAC): What is it and why use it? | Harness[36]
What is Role-Based Access Control (RBAC)? | Tools4ever[37]
你好,我是俞凡,在Motorola做过研发,现在在Mavenir做技术工作,对通信、网络、后端架构、云原生、DevOps、CICD、区块链、AI等技术始终保持着浓厚的兴趣,平时喜欢阅读、思考,相信持续学习、终身成长,欢迎一起交流学习。
微信公众号:DeepNoMind
参考资料
Role-based Access Control (RBAC) Model: https://medium.com/geekculture/role-based-access-control-rbac-model-7d8e7b7350d2
[2]RBAC like it was meant to be: https://tailscale.com/blog/rbac-like-it-was-meant-to-be
[3]系统安全: https://twitter.com/jinlow_blogger/status/1580022558396936192
[4]自主访问: https://en.wikipedia.org/wiki/Discretionary_access_control
[5]强制访问: https://en.wikipedia.org/wiki/Mandatory_access_control
[6]Access Control List: https://en.wikipedia.org/wiki/Access-control_list
[7]Discretionary Access Control: https://en.wikipedia.org/wiki/Discretionary_access_control
[8]Mandatory Access Control: https://en.wikipedia.org/wiki/Mandatory_access_control
[9]Role-Based Access Control: https://en.wikipedia.org/wiki/Role-based_access_control
[10]Attribute-based Access Control: https://en.wikipedia.org/wiki/Attribute-based_access_control
[11]History-based Access Control: https://en.everybodywiki.com/History-based_access_control
[12]Identity-based Access Control: https://en.wikipedia.org/wiki/Identity-based_security
[13]Organization-based Access Control: https://en.wikipedia.org/wiki/Organisation-based_access_control
[14]Lattice-based access control: https://www.ibm.com/docs/en/db2/11.5?topic=security-label-based-access-control-lbac
[15]Context-based Access Control: https://en.wikipedia.org/wiki/Context-based_access_control
[16]Entity-Relationship-based Access Control: https://www.scaledaccess.com/whitepapers/the-developers-guide-to-relationship-based-access-control/#:~:text=Relationship%2Dbased%20access%20control%20is,specific%20relationships%20the%20subject%20has.
[17]Extended Role-Based Access Control: https://ucm.riskmanager.modulo.com/manual/en/default.htm#!Documents/extendedrolebasedaccesscontrolmodel.htm
[18]Semantic Access Control: https://en.wikipedia.org/wiki/Semantic_security
[19]美国国家标准与技术研究院: https://www.nist.gov
[20]如何设计基于角色的分层访问控制系统: https://stackoverflow.com/questions/16139712/how-to-design-a-hierarchical-role-based-access-control-system
[21]History-based access control: https://en.everybodywiki.com/History-based_access_control
[22]Pattern-Oriented Software Architecture - Access control pattern: https://transang.me/pattern-oriented-software-architecture-access-control-pattern/
[23]Role-Based Access Control | CSRC: https://csrc.nist.gov/projects/role-based-access-control
[24]Role-Based Access Control - Wikipedia: https://en.wikipedia.org/wiki/Role-based_access_control
[25]What is Role-Based Access Control (RBAC)? Example, Benefits, and More: https://digitalguardian.com/blog/what-role-based-access-control-rbac-examples-benefits-and-more
[26]What is Role-Based Access Control | RBAC vs ACL vs ABAC | Imperva: https://www.imperva.com/learn/data-security/role-based-access-control-rbac
[27]Using RBAC Authorization: https://kubernetes.io/docs/reference/access-authn-authz/rbac
[28]What is Azure role-based access control (Azure RBAC)?: https://learn.microsoft.com/en-us/azure/role-based-access-control/overview
[29]Role-Based Access Control: https://auth0.com/docs/manage-users/access-control/rbac
[30]RBAC vs ABAC: Make the Right Call | OneLogin: https://www.onelogin.com/learn/rbac-vs-abac
[31]Understanding Role-Based Access Control (RBAC) | StrongDM: https://www.strongdm.com/rbac
[32]What is Role-Based Access Control (RBAC)?: https://www.varonis.com/blog/role-based-access-control
[33]What is Role-Based Access Control (RBAC)?: https://www.okta.com/identity-101/what-is-role-based-access-control-rbac
[34]Role-Based Access Control (RBAC) User Guide | Chronicle Security | Google Cloud: https://cloud.google.com/chronicle/docs/administration/rbac
[35]What is Role-Based Access Control (RBAC)? A Complete Guide | Frontegg: https://frontegg.com/guides/rbac
[36]Role-Based Access Control (RBAC): What is it and why use it? | Harness: https://harness.io/blog/rbac
[37]What is Role-Based Access Control (RBAC)? | Tools4ever: https://www.tools4ever.com/glossary/what-is-role-based-access-control
本文由 mdnice 多平台发布
相关文章:
深入理解RBAC
RBAC是一种基于角色实现访问控制的权限管理机制,通过定义角色和权限、用户和角色、角色和角色之间的关系,实现多层次、细粒度、可复用的权限管理系统。原文: Role-based Access Control (RBAC) Model[1] Bernard HermantUnsplash Avery Pennarun写的&quo…...
uniapp微信小程序蓝牙连接与设备数据对接
蓝牙连接并通信方法封装大致步骤。 初始化蓝牙并搜索;获取并启用service服务;数据读取和监听设备返回数据 需要使用uniapp官方提供api: // 关闭蓝牙 uni.closeBluetoothAdapter({}) // 打开蓝牙 uni.openBluetoothAdapter({}) // 搜索附近…...
HBase 计划外启动 Major Compaction 的原因
HBase 的 Compaction 有两个线程池,一个是为 Minor Compaction 准备的, 一个是为 Major Compaction 准备的,hbase.regionserver.thread.compaction.throttle 是决定 Compaction 请求放入哪个线程池的阈值,当待合并文件的总大小小于这个阈值时,就是一个 Minor Compaction,…...
设计模式-桥接模式
概念 用于把抽象化与实现化解耦使得二者可以独立变化 演示 class ColorShape {yellowCircle() {console.log(yellow circle)}redCircle() {console.log(red circle)}yellowTriangle() {console.log(yellow triangle)}redTriangle() {console.log(red triangle)} }// 测试 le…...
arcgis地形分析全流程
主要内容:DEM的获取与处理、高程分析、坡度分析、坡向分析、地形起伏度分析、地表粗糙度分析、地表曲率分析; 主要工具:镶嵌至新栅格、按掩膜提取、投影栅格、坡度、坡向、焦点统计 一 DEM的获取与处理 1.1 DEM是什么? DEM(D…...
mapper.xml中的sql标签
在MyBatis中,mapper.xml文件是用于定义数据库操作的映射文件,其中的<sql>标签用于定义可重用的SQL片段。这些SQL片段可以在<select>, <update>, <insert>, <delete>等操作中被引用,以避免在多个地方重复编写相…...
重启redis的步骤
要重启 Redis,需要使用以下步骤: 登录到您的服务器:使用 SSH 或其他远程访问方式登录到托管 Redis 的服务器。 停止 Redis 服务器:您可以使用以下命令停止 Redis 服务器: redis-cli shutdown 这将向 Redis 服务器发送…...
第二证券:如何选股票的龙头股?
在股票商场中,每个出资者的方针都是可以出资到那些未来可以表现出色并带领整个工作开展的龙头股。选股关于出资者来说非常要害,由于选股不妥或许会导致出资失利。那么,怎么选股票的龙头股呢?本文从多个角度进行剖析,协…...
【华为OD机考B卷 | 100分】统计监控、需要打开多少监控器(JAVA题解——也许是全网最详)
前言 本人是算法小白,甚至也没有做过Leetcode。所以,我相信【同为菜鸡的我更能理解作为菜鸡的你们的痛点】。 题干 OD,B 卷 100 分题目【OD 统一考试(B 卷)】 1. 题目描述 某长方形停车场每个车位上方都有一个监控…...
Python Django 详解(基础)
文章目录 1 概述1.1 安装 django1.2 创建 django 项目1.3 创建 app 2 启动 Django2.1 settings.py:注册 app2.2 view.py:URL和视图对应2.3 启动 Django2.4 访问 3 快速上手3.1 templates:html 模板3.2 static:静态文件3.3 模板语法…...
C语言内存函数
目录 memcpy(Copy block of memory)使用和模拟实现memcpy的模拟实现 memmove(Move block of memory)使用和模拟实现memmove的模拟实现: memset(Fill block of memory)函数的使用扩展 memcmp(Compare two blocks of memory)函数的使用 感谢各位大佬对我的支持,如果我的文章对你有…...
【Docker】Docker-compose及Consul多容器编排工具
使用一个Dockerfile模版文件可以定义一个单独的应用容器,当需要定义多个容器时就需要编排 docker swarm(管理跨节点) 编排工具——docker compose Dockerfile可以让用户管理一个单独的应用容器;而Compose则允许用户在一个模板&…...
Unity网络同步方案帧同步和状态同步
网络同步方案 介绍开始我们使用的状态同步(实时状态同步)后来采用的帧同步 状态同步优点缺点 帧同步顺序执行追帧重连优点缺点 总结 这两年做的都是帧同步和状态同步的项目,正好最近有时间总结一下什么是帧同步和状态同步,之前在做…...
【Monorepo实战】pnpm+turbo+vitepress构建公共组件库文档系统
Monorepo架构可以把多个独立的系统放到一起联调,本文记录基于pnpm > workspace功能,如何构建将vitepress和组件库进行联调,并且使用turbo进行任务顺序编排。 技术栈清单: pnpm 、vitepress 、turbo 一、需求分析 1、最终目标…...
CentOS 编译安装Redis
一、编译配置hiredis.h C来操作redis数据库。通过hiredis接口来实现,目前只能在Linux环境使用。 下载hiredis.h hiredis的下载地址为:https://github.com/redis/hiredis 解压并编译hiredis [rootlocalhost source_code]# pwd /usr/local/source_…...
可拓展的低代码全栈框架
尽管现在越来越多的人开始对低代码开发感兴趣,但已有低代码方案的局限性仍然让大家有所保留。其中最常见的担忧莫过于低代码缺乏灵活性以及容易被厂商锁定。 显然这样的担忧是合理的,因为大家都不希望在实现特定功能的时候才发现低代码平台无法支持&…...
C++11 智能指针
目录 智能指针 异常导致执行流乱跳 智能指针解决问题 auto_ptr unique_ptr sharded_ptr weak_ptr 智能指针 由于C11引入异常之后,执行流乱跳,所以导致之前 malloc/new 的空间很容易没有被释放,导致内存泄露问题。 所以这时候&#x…...
二、WebGPU阶段间变量(inter-stage variables)
二、WebGPU阶段间变量(inter-stage variables) 在上一篇文章中,我们介绍了一些关于WebGPU的基础知识。在本文中,我们将介绍阶段变量(inter-stage variables)的基础知识。 阶段变量在顶点着色器和片段着色…...
【Linux】31个普通信号
文章目录 1.每种信号的含义2.两种不能被忽略的信号3.两种不能被捕捉的信号 1.每种信号的含义 信号编号信号名信号含义1SIGHUP如果终端接口检测到一个连接断开,则会将此信号发送给与该终端相关的控制进程,该信号的默认处理动作是终止进程。2SIGINT当用户…...
Mac电脑交互式原型设计 Axure RP 8汉化最新 for mac
Axure RP 8是一款专业且快速的原型设计工具,主要用于定义需求、规格、设计功能和界面。这款工具主要适用于用户体验设计师、交互设计师、业务分析师、信息架构师、可用性专家和产品经理等职业。 Axure RP 8的主要特性包括能够快速设计出应用软件或Web网站的线框图、…...
接口测试中缓存处理策略
在接口测试中,缓存处理策略是一个关键环节,直接影响测试结果的准确性和可靠性。合理的缓存处理策略能够确保测试环境的一致性,避免因缓存数据导致的测试偏差。以下是接口测试中常见的缓存处理策略及其详细说明: 一、缓存处理的核…...
Prompt Tuning、P-Tuning、Prefix Tuning的区别
一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...
如何在看板中体现优先级变化
在看板中有效体现优先级变化的关键措施包括:采用颜色或标签标识优先级、设置任务排序规则、使用独立的优先级列或泳道、结合自动化规则同步优先级变化、建立定期的优先级审查流程。其中,设置任务排序规则尤其重要,因为它让看板视觉上直观地体…...
CMake基础:构建流程详解
目录 1.CMake构建过程的基本流程 2.CMake构建的具体步骤 2.1.创建构建目录 2.2.使用 CMake 生成构建文件 2.3.编译和构建 2.4.清理构建文件 2.5.重新配置和构建 3.跨平台构建示例 4.工具链与交叉编译 5.CMake构建后的项目结构解析 5.1.CMake构建后的目录结构 5.2.构…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
python爬虫:Newspaper3k 的详细使用(好用的新闻网站文章抓取和解析的Python库)
更多内容请见: 爬虫和逆向教程-专栏介绍和目录 文章目录 一、Newspaper3k 概述1.1 Newspaper3k 介绍1.2 主要功能1.3 典型应用场景1.4 安装二、基本用法2.2 提取单篇文章的内容2.2 处理多篇文档三、高级选项3.1 自定义配置3.2 分析文章情感四、实战案例4.1 构建新闻摘要聚合器…...
SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现
摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序,以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务,提供稳定高效的数据处理与业务逻辑支持;利用 uniapp 实现跨平台前…...
ETLCloud可能遇到的问题有哪些?常见坑位解析
数据集成平台ETLCloud,主要用于支持数据的抽取(Extract)、转换(Transform)和加载(Load)过程。提供了一个简洁直观的界面,以便用户可以在不同的数据源之间轻松地进行数据迁移和转换。…...
在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?
uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...
Unsafe Fileupload篇补充-木马的详细教程与木马分享(中国蚁剑方式)
在之前的皮卡丘靶场第九期Unsafe Fileupload篇中我们学习了木马的原理并且学了一个简单的木马文件 本期内容是为了更好的为大家解释木马(服务器方面的)的原理,连接,以及各种木马及连接工具的分享 文件木马:https://w…...
