深入理解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网站的线框图、…...

业务系统对接大模型的基础方案:架构设计与关键步骤
业务系统对接大模型:架构设计与关键步骤 在当今数字化转型的浪潮中,大语言模型(LLM)已成为企业提升业务效率和创新能力的关键技术之一。将大模型集成到业务系统中,不仅可以优化用户体验,还能为业务决策提供…...

JavaSec-RCE
简介 RCE(Remote Code Execution),可以分为:命令注入(Command Injection)、代码注入(Code Injection) 代码注入 1.漏洞场景:Groovy代码注入 Groovy是一种基于JVM的动态语言,语法简洁,支持闭包、动态类型和Java互操作性,…...
论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(二)
HoST框架核心实现方法详解 - 论文深度解读(第二部分) 《Learning Humanoid Standing-up Control across Diverse Postures》 系列文章: 论文深度解读 + 算法与代码分析(二) 作者机构: 上海AI Lab, 上海交通大学, 香港大学, 浙江大学, 香港中文大学 论文主题: 人形机器人…...

【大模型RAG】Docker 一键部署 Milvus 完整攻略
本文概要 Milvus 2.5 Stand-alone 版可通过 Docker 在几分钟内完成安装;只需暴露 19530(gRPC)与 9091(HTTP/WebUI)两个端口,即可让本地电脑通过 PyMilvus 或浏览器访问远程 Linux 服务器上的 Milvus。下面…...
1688商品列表API与其他数据源的对接思路
将1688商品列表API与其他数据源对接时,需结合业务场景设计数据流转链路,重点关注数据格式兼容性、接口调用频率控制及数据一致性维护。以下是具体对接思路及关键技术点: 一、核心对接场景与目标 商品数据同步 场景:将1688商品信息…...
GitHub 趋势日报 (2025年06月08日)
📊 由 TrendForge 系统生成 | 🌐 https://trendforge.devlive.org/ 🌐 本日报中的项目描述已自动翻译为中文 📈 今日获星趋势图 今日获星趋势图 884 cognee 566 dify 414 HumanSystemOptimization 414 omni-tools 321 note-gen …...
Python如何给视频添加音频和字幕
在Python中,给视频添加音频和字幕可以使用电影文件处理库MoviePy和字幕处理库Subtitles。下面将详细介绍如何使用这些库来实现视频的音频和字幕添加,包括必要的代码示例和详细解释。 环境准备 在开始之前,需要安装以下Python库:…...

网络编程(UDP编程)
思维导图 UDP基础编程(单播) 1.流程图 服务器:短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

全志A40i android7.1 调试信息打印串口由uart0改为uart3
一,概述 1. 目的 将调试信息打印串口由uart0改为uart3。 2. 版本信息 Uboot版本:2014.07; Kernel版本:Linux-3.10; 二,Uboot 1. sys_config.fex改动 使能uart3(TX:PH00 RX:PH01),并让boo…...

智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...