权限控制-RBAC模型

前言

在计算机和信息系统的发展过程中,安全问题一直是关注的焦点。传统的访问控制模型主要基于用户身份、资源和操作等方面进行控制,但这种模型存在一些严重的缺陷,如难以适应复杂的应用环境、权限管理不够灵活、难以实现分级授权等问题。

为了解决这些问题,RBAC模型开始被引入。

RBAC是什么

RBAC(Role-Based Access Control)模型是一种常用的权限控制模型,用于管理和控制用户对系统资源的访问权限。在 RBAC 模型中,访问权限是通过角色而不是直接与用户关联来进行管理的。

RBAC组成

  • 用户(User):用户代表系统中的实体,可以是个人用户或其他应用程序。用户通过被分配角色来获得相应的权限,从而决定其在系统中能够执行的操作。
  • 角色(Role):角色代表了一组相关权限的集合,通常与用户的职能、责任或角色相对应。每个角色拥有特定的权限,定义了该角色所能执行的操作。
  • 权限(Permission):权限是指用户对系统资源的访问能力。它可以是操作级别的,如读取、写入、删除等,也可以是对象级别的,如访问特定文件或数据库。

关系如下图:

角色和用户、角色和权限大多设计为多对多关系。

RBAC工作原理

把权限赋予角色,再把角色赋予用户,用户就拥有了角色所对应的权限。用户拥有的权限等于他所有的角色持有权限之和。

RBAC1

上边是基本的 RBAC0 模型,包括了 RBAC 最核心的概念和机制。RBAC0 模型主要解决了访问控制模型的简单性和灵活性问题,将访问权限的管理从用户直接解耦出来,实现了相对较好的权限管理和安全性。

RBAC1 在 RBAC0 的基础上,进行了 角色分层。通过给角色划分等级,每个等级拥有不同的权限,从而实现了更细粒度的权限管理。这种角色的分层让权限的分配更加灵活,可以根据具体需求来调整角色等级和相应的权限。

角色分层如下图所示:

角色分层,同一个角色可以有不同等级,不同等级又对应着不同的权限。

子角色可以对父角色的权限进行继承,但是子角色的权限一定小于父角色。

RBAC2

RBAC2 在 RBAC0 的基础上增加了 RBAC 的 约束模型。具体来说,这些限制可以分成两类,即静态职责分离(SSD)和动态职责分离(DSD)。通过这些约束模型,RBAC2 能够更好地保证权限的安全性和稳定性。

静态职责分离(SSD) 主要是对用户、角色和权限三者之间增加了一些限制,例如互斥角色和基数约束。在 SSD 中,一些特定的角色不能被分配给同一个用户。例如,同一用户不能被分配 "管理员" 和 "普通用户" 这两个互斥角色。另外,对于用户拥有的角色数量也有限制,即一个用户拥有的角色是有限的。在一些场景中,例如公司或组织的实际运营中,不同的职位或角色之间具有一定的排他性,不能同时由同一人担任。通过 SSD,我们可以保证这种排他性得以实现。

动态职责分离(DSD) 主要是在会话和角色之间增加限制。具体来说,DSD 可以动态地约束用户拥有的角色。例如,一个用户可以有多个角色,但是在一次会话中只能激活一个角色。这种动态的约束可以防止用户在会话中同时激活多个角色,从而保证系统的安全性。

RBAC2 用户、角色和权限的关系如下图所示:

RBAC3

RBAC3 是 RBAC2 和RBAC1的合集,所以它 既包含了角色分层,也包括了可以增加的各种约束。因此,RBAC3是这四种模型中最为全面和复杂的权限管理模型。可以实现更为精细和安全的权限管理。

总结

RBAC 适用于需要对用户进行细粒度访问控制的场景,比如企业内部系统。权限控制最难的部分在于业务上的设计,根据需求设计一个适应本企业的 RBAC 才是真正的难点。

相关推荐
Yuan_o_28 分钟前
Linux 基本使用和程序部署
java·linux·运维·服务器·数据库·后端
程序员一诺1 小时前
【Python使用】嘿马python高级进阶全体系教程第10篇:静态Web服务器-返回固定页面数据,1. 开发自己的静态Web服务器【附代码文档】
后端·python
快乐非自愿1 小时前
分布式系统架构2:服务发现
架构·服务发现
码农爱java1 小时前
设计模式--抽象工厂模式【创建型模式】
java·设计模式·面试·抽象工厂模式·原理·23种设计模式·java 设计模式
2401_854391081 小时前
SSM 架构中 JAVA 网络直播带货查询系统设计与 JSP 有效实现方法
java·开发语言·架构
264玫瑰资源库1 小时前
从零开始C++棋牌游戏开发之第二篇:初识 C++ 游戏开发的基本架构
开发语言·c++·架构
神一样的老师1 小时前
面向高精度网络的时间同步安全管理架构
网络·安全·架构
2401_857026231 小时前
基于 SSM 架构的 JAVA 网络直播带货查询系统设计与 JSP 实践成果
java·开发语言·架构
9527华安1 小时前
FPGA实现MIPI转FPD-Link车载同轴视频传输方案,基于IMX327+FPD953架构,提供工程源码和技术支持
fpga开发·架构·mipi·imx327·fpd-link·fpd953
Jiude2 小时前
算法题题解记录——双变量问题的 “枚举右,维护左”
python·算法·面试