花几分钟快速了解几种常见的权限模型(ACL,RBAC,ABAC)

一:前言

权限管理 几乎应用于任何具有用户体系的系统,它旨在管理主体对象操作 ,由于其普遍性 与其存在的重要性 ,大佬们已经研究总结了很多成熟权限模型,本文意在通过对这些权限模型的分析,能够让大家对权限管理设计有个整体的认知。

二: 巨人的肩膀

ACL(访问控制列表)

用户能不能访问某个资源,通过配置一个用户能否访问控制的列表来判断,如下图所示:

适合于功能单一、权限功能明确或特性化非常明显的系统,现在常用于网络安全,用于控制网络流量和访问权限。

RBAC(基于角色的访问控制)

通过ACL我们需要给每一份主体都配置一份访问控制列表,那么有没有办法给某类具备相同权限的主体只用配一次权限集合呢?基于角色的访问控制的解决方案就是通过提前预置角色,角色绑定权限集合,后面再有同等权限的主体只需要关联该角色即可。(这个模型好像更大的分布在目前我们使用的系统中,可见它是非常好理解,也是非常适用于我们的系统里面的,适用于集中式管理的系统),也用一个图简单表示:

ABAC(基于属性的访问控制,被称为下一代权限模型)

上面两种权限模型都是静态的,绑定的权限如果发生变化必须去静态调整(当然也有哥们会犟,就是说RBAC也可以实现,因为通过程序监听可以动态改权限,这种方案当然可以,但是维护成本巨高,而且需要找到所有的符合条件的权限集合,容易漏和出错),而ABAC模型的出现意在实现动态的访问控制,它并不直接与角色/权限绑定,而是动态计算如下图所示:

属性是主体、对象或环境条件的特征。属性包含name-value对提供的信息。

主体是用户或NPE,例如发出访问请求以对对象执行操作的设备。主体被分配了一个或多个属性。在本文档中,假设主体和用户是同义词。

对象是由ABAC系统管理访问权限的系统资源,例如设备、文件、记录、表、进程、程序、网络或包含或接收信息的域。它可以是资源或请求的实体,也可以是主体可以在其上执行操作的任何东西,包括数据、应用、服务、设备和网络。

操作是主体对对象的请求执行函数。操作包括读取、写入、编辑、删除、复制、执行和修改。

策略是规则或关系的表示,在给定主体、对象和可能的环境条件的属性值的情况下,可以确定是否应允许请求的访问。

环境条件:发生访问请求的操作或情景环境。环境条件是可检测的环境特征。环境特征独立于主体或对象,可能包括当前时间、星期几、用户位置或当前威胁级别。

其中"访问控制计算"接收主体的访问请求,然后根据特定策略检查主体和对象的属性。然后"访问控制计算"确定对象可以对对象执行什么操作。

最后

本文通过极简单的描述,加上笔者可能表达能力也有限,所以把一些参考资料也附上,帮助大家理解:

ABAC

RBAC

史上最强的权限系统设计攻略(上)、基础概念、RBAC以及ABAC模型

史上最强的权限系统设计攻略(下)、ABAC在复杂场景下的实现思路

相关推荐
NiNg_1_2342 小时前
SpringBoot整合SpringSecurity实现密码加密解密、登录认证退出功能
java·spring boot·后端
Chrikk3 小时前
Go-性能调优实战案例
开发语言·后端·golang
幼儿园老大*3 小时前
Go的环境搭建以及GoLand安装教程
开发语言·经验分享·后端·golang·go
canyuemanyue3 小时前
go语言连续监控事件并回调处理
开发语言·后端·golang
杜杜的man3 小时前
【go从零单排】go语言中的指针
开发语言·后端·golang
customer085 小时前
【开源免费】基于SpringBoot+Vue.JS周边产品销售网站(JAVA毕业设计)
java·vue.js·spring boot·后端·spring cloud·java-ee·开源
Yaml46 小时前
智能化健身房管理:Spring Boot与Vue的创新解决方案
前端·spring boot·后端·mysql·vue·健身房管理
小码编匠7 小时前
一款 C# 编写的神经网络计算图框架
后端·神经网络·c#