深入理解 RBAC

简介: 深入理解 RBAC

RBAC 是一种基于角色实现访问控制的权限管理机制,通过定义角色和权限、用户和角色、角色和角色之间的关系,实现多层次、细粒度、可复用的权限管理系统。原文: Role-based Access Control (RBAC) Model


image.png


Avery Pennarun 写的"RBAC like it was meant to be非常值得一读。


在 web 或移动应用中,访问权限控制机制是保证系统安全的重要手段,其中最常见的就是基于角色的访问控制(RBAC, Role-based Access Control)。


基于角色的访问控制是传统访问控制(自主访问强制访问)的一种有前途的替代方案。在 RBAC 模式下,权限与角色相关联,从而大大简化了对权限的管理。组织为了完成各种任务,从而创建了角色,用户根据职责和技能被分配到相应的角色,也可以从一个角色分配到另一个角色。新角色可以根据新需求和系统集成赋予新的权限,也可以从角色中撤回权限。可以建立角色-角色关系来包含更广泛的客观情况。


image.png


图片来源: https://www.dnsstuff.com/rbac-vs-abac-access-control



访问控制模型


  1. 访问控制列表(ACL, Access Control List)
  2. 自主访问控制(DAC, Discretionary Access Control)
  3. 强制访问控制(MAC, Mandatory Access Control)
  4. 基于角色的访问控制(RBAC, Role-Based Access Control)
  5. 基于属性的访问控制(ABAC, Attribute-based Access Control)
  6. 基于历史的访问控制(HBAC, History-based Access Control)
  7. 基于身份的访问控制(IBAC, Identity-based Access Control)
  8. 基于组织的访问控制(OrBAC, Organization-based Access Control)
  9. 基于网格的访问控制(LBAC, Lattice-based access control)
  10. 基于上下文的访问控制(CBAC, Context-based Access Control)
  11. 基于实体关系的访问控制(ReBAC, Entity-Relationship-based Access Control)
  12. 扩展基于角色的访问控制(Extended Role-Based Access Control)
  13. 语义访问控制(SAC, Semantic Access Control)



什么是 RBAC?


image.png


图片来源: https://www.quora.com/What-does-the-role-based-access-control-model-mean-in-workforce-management


  • 通过分配一组与角色关联的权限来提供高级访问
  • 支持公认的安全原则: 最小特权原则、责任分离原则和数据抽象原则
  • 最小权限原则(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 模型是由美国国家标准与技术研究院开发的标准化 RBAC 定义。



4 个基本概念模型:


image.png


图片来源: https://transang.me/pattern-oriented-software-architecture-access-control-pattern


  1. RBACO — 核心 RBAC
  2. RBAC1 — 层次 RBAC (RBAC0 + 角色层次结构)
  3. RBAC2 — 约束 RBAC (RBAC0 + 约束)
  4. RBAC3 — 组合 RBAC (RBAC1 + RBAC2)


RBAC 授权的过程可以抽象为:


  1. 谁(Who) — 权限的用户或角色
  2. 什么(What) — 资源
  3. 如何(How) — 具体的权限



RBAC0


  • 3 个元素: 用户、角色和权限
  • 设计基于"[多对多(many-to-many)](https://en.wikipedia.org/wiki/Many-to-many_(data_model "多对多(many-to-many "多对多(many-to-many)")"))"关系,即多个用户可以拥有相同的角色,一个用户可以拥有多个角色。


image.png


图片来源: https://www.bettercloud.com/monitor/the-fundamentals-of-role-based-access-control

RBAC1


  • 4 个元素: 用户、角色、权限、层次结构/继承
  • 定义了不同角色之间的从属关系
  • 高级别角色可以自动从低级别角色获取权限
  • 角色之间的继承关系可以分为一般继承关系和有限继承关系
  • 一般继承关系只要求角色继承关系是绝对的偏序关系(角色之间的多重继承)
  • 有限继承关系要求角色继承关系是树状结构(角色之间的单一继承)


StackOverflow 的 Q/A 帖子"如何设计基于角色的分层访问控制系统"是一个很好的例子,值得一读。


  1. 树(Tree) — (自底向上的层次结构) — 树底部的元素被授予更大的权限。
  2. 倒立树(Inverted Tree) — (自顶向下的层次结构) — 高级角色将其部分权限继承给低级角色,同一级别的节点不共享权限。


image.png


图片来源: https://techdifferences.com/difference-between-top-down-and-bottom-up-approach.html


  1. 网格(Grid) — (自底向上和自顶向下的组合) — 每个角色都可以从它下面和上面的节点继承权限,因此相对灵活,可以共享权限。顶级节点被授予更大的权限。


image.png


图片来源: http://grid-layout.com/grid-lines.html


RBAC2


  • 4 个元素: 用户、角色、权限和约束
  • 由于存在利益冲突策略,角色之间的关系存在约束


image.png


图片来源: https://slideplayer.com/user/10879796


RBAC3


  • 将 RBAC1 和 RBAC2 的所有特征(角色继承和约束关系)集成到模型中。
  • 可以根据不同的上下文限制或激活可用的用户权限,当用户在会话期间执行的任务可能需要不同级别的访问时,可以在会话期间激活更高级别的权限。



类图


  1. User 表(用户 ID、用户名和其他属性)
  2. Role 表(角色 ID,角色名,角色类型)
  3. User_Role 表(用户角色关联表)
  4. Product 表(产品 ID,产品类型,渠道,费用,地区)
  5. Region 表(地区代码、渠道)
  6. Permission 表(权限 ID、权限类型、权限名称和其他属性)
  7. Role_permission 表(角色权限关联表)
  8. Menu 表(菜单 ID,菜单名称,菜单路径 URL,父菜单 ID,资源和其他属性)
  9. Page_element 表(资源、页面元素 ID、页面元素代码和其他属性)
  10. File 表(文件 ID,文件名,文件路径)
  11. Permission_Menu 表(权限 ID,菜单 ID)
  12. Permission_Element 表(权限 ID,页面元素 ID)
  13. Permission_File 表(权限 ID,文件 ID)
  14. Operation 表(动作 ID、动作名称、动作代码等属性)
  15. Permission_Operation 表(权限 ID,操作 ID)



RBAC 模型的优点


  1. 降低授权管理的复杂性
  2. 降低管理成本
  3. 创建系统级的、可复用的权限分配
  4. 减少分配用户权限时出错的可能性
  5. 支持企业安全策略


RBAC 模型的缺点


  1. 不提供操作顺序控制机制


参考文献

History-based access control


Pattern-Oriented Software Architecture - Access control pattern


Role-Based Access Control | CSRC


Role-Based Access Control - Wikipedia


What is Role-Based Access Control (RBAC)? Example, Benefits, and More


What is Role-Based Access Control | RBAC vs ACL vs ABAC | Imperva


Using RBAC Authorization


What is Azure role-based access control (Azure RBAC)?


Role-Based Access Control


RBAC vs ABAC: Make the Right Call | OneLogin


Understanding Role-Based Access Control (RBAC) | StrongDM


What is Role-Based Access Control (RBAC)?


What is Role-Based Access Control (RBAC)?


Role-Based Access Control (RBAC) User Guide | Chronicle Security | Google Cloud


What is Role-Based Access Control (RBAC)? A Complete Guide | Frontegg


Role-Based Access Control (RBAC): What is it and why use it? | Harness


What is Role-Based Access Control (RBAC)? | Tools4ever


目录
相关文章
|
设计模式 算法 安全
【设计模式】RBAC 模型详解
随着软件系统的复杂性和规模的不断增长,权限管理成为了一个至关重要的问题。在大型多人协作的系统中,如何有效地管理不同用户的访问权限,确保系统的安全性和稳定性,是每一个开发者都需要面对的挑战。为了解决这一问题,业界提出了一种被广泛应用的权限管理模型——基于角色的访问控制(Role-Based Access Control,简称RBAC)。希望通过本篇博客的学习,您能够深入了解RBAC模型的核心思想和实现原理,掌握如何在实际项目中应用RBAC模型来提高系统的安全性和可维护性。
2029 1
|
存储 Java 编译器
Go函数解密:底层工作原理
Go函数解密:底层工作原理
289 0
|
10月前
|
Linux iOS开发 MacOS
deepseek部署的详细步骤和方法,基于Ollama获取顶级推理能力!
DeepSeek基于Ollama部署教程,助你免费获取顶级推理能力。首先访问ollama.com下载并安装适用于macOS、Linux或Windows的Ollama版本。运行Ollama后,在官网搜索“deepseek”,选择适合你电脑配置的模型大小(如1.5b、7b等)。通过终端命令(如ollama run deepseek-r1:1.5b)启动模型,等待下载完成即可开始使用。退出模型时输入/bye。详细步骤如下图所示,轻松打造你的最强大脑。
14620 86
|
9月前
|
人工智能 资源调度 API
AnythingLLM:34K Star!一键上传文件轻松打造个人知识库,构建只属于你的AI助手,附详细部署教程
AnythingLLM 是一个全栈应用程序,能够将文档、资源转换为上下文,支持多种大语言模型和向量数据库,提供智能聊天功能。
6792 76
|
SQL 存储 关系型数据库
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
老架构师尼恩在其读者交流群中分享了关于 MySQL 中 redo log、undo log 和 binlog 的面试题及其答案。这些问题涵盖了事务的 ACID 特性、日志的一致性问题、SQL 语句的执行流程等。尼恩详细解释了这些日志的作用、所在架构层级、日志形式、缓存机制以及写文件方式等内容。他还提供了多个面试题的详细解答,帮助读者系统化地掌握这些知识点,提升面试表现。此外,尼恩还推荐了《尼恩Java面试宝典PDF》和其他技术圣经系列PDF,帮助读者进一步巩固知识,实现“offer自由”。
美团面试:binlog、redo log、undo log的底层原理是什么?它们分别实现ACID的哪个特性?
|
存储 监控 安全
深入理解RBAC权限系统
RBAC(Role-Based Access Control)是一种访问控制模型,其核心概念是基于角色的权限分配。该模型的设计目标是简化对系统资源的访问管理,提高系统的安全性和可维护性。
2700 2
深入理解RBAC权限系统
|
消息中间件 Java
【实战揭秘】如何运用Java发布-订阅模式,打造高效响应式天气预报App?
【8月更文挑战第30天】发布-订阅模式是一种消息通信模型,发送者将消息发布到公共队列,接收者自行订阅并处理。此模式降低了对象间的耦合度,使系统更灵活、可扩展。例如,在天气预报应用中,`WeatherEventPublisher` 类作为发布者收集天气数据并通知订阅者(如 `TemperatureDisplay` 和 `HumidityDisplay`),实现组件间的解耦和动态更新。这种方式适用于事件驱动的应用,提高了系统的扩展性和可维护性。
281 2
|
监控 Java
G1垃圾回收器的哪些配置参数对性能影响最大,如何调整这些参数
G1垃圾回收器的哪些配置参数对性能影响最大,如何调整这些参数
830 0
|
JavaScript 前端开发 API
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
Vue Router【详解】含路由配置、路由定义、路由跳转、路由传参、自动注册路由、路由守卫、页面滚动、监听路由、$route、$router、路由过渡动画等
3474 1
|
机器学习/深度学习 数据库 数据安全/隐私保护
RBAC模型介绍
RBAC模型是一种基于角色的访问控制机制,用于解决企业系统中不同用户对不同业务的权限管理问题。它将功能集合为角色,然后将角色分配给用户,简化了大量用户的权限分配过程,降低了操作错误和复杂性。通过角色,可以实现用户与功能的解耦,便于权限管理。在RBAC中,用户、角色和权限之间存在多对多的关系,通常涉及五张数据库表来维护这种关系。
495 10