基于RBAC的通用权限管理系统的详细分析与实现(理念篇——权限模型)

为保障信息管理系统的数据安全,必须对用户的访问进行控制,而对用户的权限管理,即可实现访问控制。由于权限管理系统在大多数信息管理系统中都会被用到。因此各信息管理系统的权限管理功能具有一定的相似性。为避免重复开发造成人财物的浪费,其通常作为一个独立模块进行开发,并复用到各个信息管理系统中。

权限管理可分为身份验证和访问控制。由于访问控制更复杂,也是重点,先着重了解访问控制。

一般来说,它包括三个要素:主体、客体以及访问权限。

其中,主体是指一种实体,通常是指人或用户,有时也可以包括计算机等,它可以作用于客体。

客体是指这样一种实体,它是一种信息实体,或者它本身从主体或其它客体接受信息的实体,通常是指资源,如文件、目录、记录等等。

访问权限是指一个主体对一个客体的访问特权,常见的如读、写、执行等等。

访问控制的实现机制包括:

(1)访问权限管理矩阵(Access Matrix):矩阵的行表示客体(被访问的资源),列表示主体,行和列的交叉点表示某个主体对客体的访问权限。
(2)访问权限管理表(Access Control List):从访问权限管理矩阵的客体出发,表达矩阵某一列的管理信息,访问权限管理列表描述的是客体所授权的用户(主体)及其访问权限,访问权限管理列表是采用最多的一种访问权限管理技术。
(3)访问能力表(Capability List):从访问权限管理矩阵的主体出发,表达矩阵某一行的管理信息,能力列表描述的是主体所被授权可以访问的客体及其权限。
(4)授权关系表(Authorization List):表中的每一行(或一个元组)表示主体和客体的一个权限关系,常被用于关系数据库系统。
在这里插入图片描述

接着,来了解权限模型的演进。

一、权限模型的演进

在权限管理系统中我们会遇到类似这样的权限:

  • 访问权限:控制用户能否登录系统和访问系统资源的权限。
  • 功能权限:控制用户可以使用的系统功能和操作的权限。
  • 数据权限:控制用户可以访问、查看、修改或删除的数据的权限。 配置权限:控制用户可以修改系统配置和设置的权限。
  • 审计权限:控制用户可以查看系统日志和审计记录的权限。 安全权限:控制用户可以管理系统账户和权限的权限。
  • 文件权限:控制用户可以操作系统文件和文件夹的权限。 执行权限:控制用户可以执行哪些程序、脚本或命令的权限。
  • 通信权限:控制用户可以使用哪些通信方式和进行何种通信的权限。

1.ACL模型(用户-权限)

自主访问控制(Discretionary Access Control, DAC)的系统中,它允许资源的所有者(通常是文件、目录或其他对象的创建者)自主决定谁可以访问这些资源以及以何种方式访问。这种控制机制给予资源所有者较大的灵活性,让他们能够根据需要分配访问权限。

大多数实现DAC的系统使用ACL来记录每个客体的访问权限信息。ACL是一个列表,列出了哪些用户或用户组可以访问该客体,以及他们各自的具体权限。

自主访问控制广泛应用于各种操作系统、网络共享、数据库管理系统以及其他需要灵活权限管理的环境中,例如Windows、Linux等操作系统均支持通过ACL实施自主访问控制。但是,该访问控制的安全性依赖于用户的安全意识,如果用户不慎或恶意分配了不当的权限,可能导致安全漏洞。

怎么把权限分配给用户?用户少的情况下,可以直接分配,一个用户可以有多个权限,一个权限可以被多个用户拥有,用户-权限的模型结构如下所示:

在这里插入图片描述

这种模型能够满足权限的基本分配能力,但是随着用户数量的增长,这种模型的弊端就凸显出来了,每一个用户都需要去分配权限,非常的浪费管理员的时间和精力,并且用户和权限杂乱的对应关系会给后期带来巨大的维护成本。这种对应关系在用户多的情况下基本无法维护了。

假设系统有1000个用户,有1000种权限,则总共需要进行1000*1000=1000000次赋予权限操作。

管理复杂度较高,特别是在大型系统中,跟踪和维护大量的访问控制规则可能非常困难。

2.RBAC0模型(用户-角色-权限)

其实,很多用户负责同一个业务模块所需要的权限是一样的,这样的话我们是不是可以借助第三个媒介,把需要相同的权限都分配给这个媒介,然后用户和媒介关联起来,用户就拥有了媒介的权限了。这就是经典的RBAC模型,其中媒介就是我们通常所说的角色。

在这里插入图片描述

有了角色之后可以把权限分配给角色,需要相同权限的用户和角色对应起来就可以了,一个权限可以分配给多个角色,一个角色可以拥有多个权限,同样一个用户可以分配多个角色,一个角色也可以对应多个用户。

我们创建角色是为了解决用户数量大的情况下,用户分配权限繁琐以及用户-权限关系维护成本高的问题。抽象出一个角色,把需要一起操作的权限分配给这个角色,把角色赋予用户,用户就拥有了角色上的权限,这样避免了一个个的给用户分配权限,节省了大量的资源。

RBAC(基于角色控制)是对DAC(自主访问控制)和MAC(强制访问控制)的改进,基于用户在系统中所起的作用设置其访问权限。与DAC相比,RBAC以非自主性取代自主性,提高了系统安全性。与MAC相比,RBAC以基于角色的权限管理取代基于用户的权限管理,提高了系统的灵活性。RBAC采用与企业组织结构一致的方式进行安全管理

假设系统有1000个用户,有1000种权限分配给了100个角色,则总共需要进行1000x100(给角色分配权限)+1000x100(给用户分配角色)=200000次赋予权限操作。

3.RBAC1模型(角色继承)

在软件使用了一段时间后,负责权限维护的管理员发现了一个新问题——系统中存在的角色太多了。在企业中多角色都具有重叠的权限,也就是说属于不同角色之间的权限有一部分是相同的,例如查询等权限可能是企业中每个员工都应具有的权限。而只要有权限不一样的用户加入系统,就需要新建一个角色,当用户权限分得很细的时候,甚至比ACL还繁琐。

很容易发现,角色之间存在类似于组织一样的上下级关系,例如,我们可以创建一个较低层次的角色(例如员工角色),把通用权限授予给员工角色,而让别的角色继承员工角色来获得通用权限。

类似于员工——采购员——采购主管——总经理这样的角色级别,可以更好地模拟企业的组织结构并且便于权限的管理。这种在角色中引入上下级关系的RBAC模型就叫做角色继承的RBAC模型(RBAC1)。

当安全管理员认为某一个权限不再适合于授予给整个企业的员工,那么他只需要从员工角色中回收该权限即可,而不用从企业中的每个角色中去回收该权限。

在一个业务场景中,如果角色需区分:设计主管、设计组长、设计成员,并且管理方式为向下兼容时,则需使用角色继承的RBAC1模型。上层角色继承下层角色的全部权限,且可额外赋予权限。

在这里插入图片描述
注意是管理者继承普通员工的权限,管理者也可扩展相应职能特权。比如,设计组长继承于设计成员的权限,设计主管继承于设计组长的权限。

角色间的继承关系可分为一般继承关系和受限继承关系。角色的继承关系的图形表示主要有两种:树形图和有向无环图。
在这里插入图片描述

一般继承关系仅要求角色继承关系是一个绝对偏序关系,允许角色间的多继承。而受限继承关系则进一步要求角色继承关系是一个树结构,实现角色间的单继承。这种设计可以给角色分组和分层,一定程度简化了权限管理工作。

RBAC采用继承机制实现角色层次结构,符合人的自然思维方式和企业的自然组织结构。

4.RBAC2模型(角色受限)

在一个产品或系统中,部分角色可能是需要隔离的、不允许被同时赋予一个人的。跟大家熟知的“不能既是‘运动员’又是‘裁判员’ ”一个道理。例如,滴滴的APP分为乘客端和车主端,两者角色不同,防止操作互相冲突。

基于核心模型的基础上,进行了角色的约束控制,RBAC2模型中添加了责任分离关系,其规定了权限被赋予角色时,或角色被赋予用户时,以及当用户在某一时刻激活一个角色时所应遵循的强制性规则。

责任分离包括静态责任分离和动态责任分离。

静态责任分离指限制定义在用户指派(角色授权)阶段,与会话及角色激活无关。以角色互斥为例,如果定义两个角色为静态的角色互斥,那么任何一个用户都不能同时被指派到这两个角色。静态职责分离实现简单,语义清晰,便于管理,但是不够灵活,有些实际情况无法处理。

动态责任分离指用户不能同时操作两个互斥的角色进行登录。限制定义在角色激活阶段,作用域在会话内部。仍以角色互斥为例,如果定义两个角色为动态的角色互斥,那么1个用户可以同时被指派这两个角色,但是在任何一个会话中都不能同时激活它们。由此可见动态职责分离更灵活,基本上能处理各种实际情况,但实现略复杂。

静态分离和动态分离主要包含三种约束形式:

互斥角色: 同一用户只能分配到一组互斥角色集合中至多一个角色,支持责任分离的原则。互斥角色是指各自权限互相制约的两个角色。

比如,财务部有会计和出纳两个角色,他们是互斥角色,那么用户不能同时拥有这两个角色,防止欺诈的情况发生,体现了职责分离原则。

在这里插入图片描述

基数约束: 用于指定一个角色可被同时授权或激活的数目。互斥角色中一个用户可拥有的角色数目受限;同样一个角色对应的用户数目也应受限,以控制高级权限在系统中的分配。比如,一个产品组中必须有且只有一个管理员,不允许删除或再分配管理员角色,仅允许将负责人角色变更。再比如,总经理的角色只能由一个人担任,不允许有第二个人担任,那么总经理角色的用户基数就为1。
在这里插入图片描述

先决条件角色: 先决条件角色是指在分配某个角色之前,用户必须先拥有另一个或一组先决条件角色。这种机制可以用于确保用户在获得某个高级别角色之前必须具备一定的背景或权限。限制的模型不仅仅对分配过程产生影响,有时即使拥有了多种角色,因为不同的角色对同一个功能的使用方式或数据会产生冲突,所以使用时也需要进行限制。如下图所示为同一时间仅允许以一个身份登录。例如,想成为某个部门的经理,首先必须是该部门的成员。

时间约束(Temporal Constraints):是指给用户分配角色及各种会话状态有时间限制,分连续时间约束和周期时间约束。时间约束规定角色或权限的有效期,比如仅在特定时间或工作时间段内生效。这可以用来临时提升或限制用户的访问权限。

5.RBAC3(统一模型)

RBAC3,它是RBAC1与RBAC2合集,所以RBAC3是既有角色分层又有约束的一种模型。
RBAC1 引入了角色的层次结构和权限继承的概念,增加了灵活性和简化了权限管理。RBAC2 在 RBAC1 的基础上引入了动态任务权限的概念,使得权限的分配更加灵活和动态。

在这里插入图片描述

RBAC3 进一步提高了安全性和灵活性,引入了更高级的审计功能、自定义安全策略、高级用户管理等。

6.用户-用户组-角色-权限

当平台用户基数增大,角色类型增多时,而且有一部分人具有相同的属性,比如财务部的所有员工,如果直接给用户分配角色,管理员的工作量就会很大,如果把相同属性的用户归类到某用户组,那么管理员直接给用户组分配角色,用户组里的每个用户即可拥有该角色,以后其他用户加入用户组后,即可自动获取用户组的所有角色,退出用户组,同时也撤销了用户组下的角色,无须管理员手动管理角色。

RBAC模型添加用户组之后的模型图如下所示:
在这里插入图片描述
用户组是一群用户的组合,用户组把相同属性的用户组合起来,比如同一个项目的开发、产品、测试可以是一个用户组,同一个部门的相同职位的员工可以是一个用户组, 一个用户组可以是一个职级,可以是一个部门,可以是一起做事情的来自不同岗位的人。

用户组与用户所在的部门属于两个概念,用户组是权限上的概念,用户所在部门属于人力资源的概念,两者存在弱关联,需要区分开。

假设系统有1000个用户,有1000种权限分配给了100个角色,100个角色分配给10个用户组,则总共需要进行1000x100(给角色分配权限)+100x10(给用户组分配角色)+1000x10(给用户分配用户组)=111000次赋予权限操作。

根据用户组是否有上下级关系,可以分为有上下级的用户组和普通用户组:

  • 具有上下级关系的用户组: 最典型的例子就是部门和职位,可能多数人没有把部门职位和用户组关联起来吧。当然用户组是可以拓展的,部门和职位常用于内部的管理系统,如果是面向C端的系统,比如淘宝网的商家,商家自身也有一套组织架构,比如采购部,销售部,客服部,后勤部等,有些人拥有客服权限,有些人拥有上架权限等等,所以用户组是可以拓展的。

  • 普通用户组: 即没有上下级关系,和组织架构,职位都没有关系,也就是说可以跨部门,跨职位,举个例子,某电商后台管理系统,有拼团活动管理角色,我们可以设置一个拼团用户组,该组可以包括研发部的后台开发人员,运营部的运营人员,采购部的人员等等。

6.1 具有上下级关系的用户组

常见的组织架构如下图:
在这里插入图片描述
我们可以把组织与角色进行关联,用户加入组织后,就会自动获得该组织的全部角色,无须管理员手动授予,大大减少工作量,同时用户在调岗时,只需调整组织,角色即可批量调整。组织的另外一个作用是控制数据权限,把角色关联到组织,那么该角色只能看到该组织下的数据权限。

假设财务部的职位如下图:
在这里插入图片描述
每个组织部门下都会有多个职位,比如财务部有总监,会计,出纳等职位,虽然都在同一部门,但是每个职位的权限是不同的,职位高的拥有更多的权限。总监拥有所有权限,会计和出纳拥有部分权限。特殊情况下,一个人可能身兼多职。

根据以上场景,新的权限模型就可以设计出来了,如下图:
在这里插入图片描述

根据系统的复杂度不同,其中的多对多关系和一对一关系可能会有变化,

  • 在单系统且用户类型单一的情况下,用户和组织是一对一关系,组织和职位是一对多关系,用户和职位是一对一关系,组织和角色是一对一关系,职位和角色是一对一关系,用户和用户组是多对对关系,用户组和角色是一对一关系,当然这些关系也可以根据具体业务进行调整。模型设计并不是死的,如果小系统不需要用户组,这块是可以去掉的。
  • 分布式系统且用户类型单一的情况下,到这里权限系统就会变得很复杂,这里就要引入了一个"系统"概念,此时系统架构是个分布式系统,权限系统独立出来,负责所有的系统的权限控制,其他业务系统比如商品中心,订单中心,用户中心,每个系统都有自己的角色和权限,那么权限系统就可以配置其他系统的角色和权限。
6.2 普通用户组

如果一个部门上万人,那么我们就需要给这个部门上万人分别设置角色。而这上万其实是具有相同的权限的,如果直接采用基础的RBAC权限模型的话,那么面对这样的情况,无疑也是具有一个庞大的重复的工作量,并且也不利于后期用户变更的维护管理,那么针对相同用户具有相同的权限的情况,我们便可以引入用户组的概念。

什么是用户组呢?用户组:把具有相同角色的用户进行分类。类似如下情况:

  • 用户1、用户3、用户5、用户8→建立用户组1
  • 用户2、用户6、用户7→建立用户组2

因为用户4只有一个用户,所以直接还是单独建立用户与角色的关系,不需要建立用户组,当然尽管只有一个用户也是可以建立用户组的关系,这样有利于后期其他用户与用于4具有相同的角色时,就可以直接将其他用户添加到这个用户组下即可,根据业务的实际情况而选择适合的方案即可。

在这里插入图片描述
给具有相同权限的用户建立用户组,将用户组关联到对应的角色下,此用户组就拥有了此角色下的所有权限,而用户是属于用户组的,所以用户组下的所有用户也就同样的拥有了此角色下的所有权限。一个用户可以属于多个用户组,一个用户组也可以包括多个用户,所以用户与用户组是多对多的关系。

普通用户组是没有上下级关系的用户分组。在日常系统最常见的普通用户组为“项目组”,按项目组来划分用户的数据权限。

举例,以应用项目的纬度控制用户可访问的数据范围。

在这里插入图片描述

7.权限组(用户-用户组-角色-权限组-权限)

用户可以分组,权限也可以分组,权限特别多的情况下,可以把一个模块的权限组合起来成为一个权限组,权限组也是解决权限和角色对应关系复杂的问题。

比如我们定义权限的时候目录、菜单、按钮都可以是权限,一个目录下面有几十个菜单,每个菜单下面又有几十个按钮,这时候我们把权限一个个分配给角色也是非常麻烦的,可以采用分组的方法把权限分组,然后把分好的组赋予角色就可以了。加入权限组之后的RBAC模型如下所示:

在这里插入图片描述
给权限分组也是个技术活,需要理清楚权限之间的关系,比如支付的运营后台我们需要查各种信息,账务的数据、订单的数据、商户的数据等等,这些查询的数据并不在一个页面,每个页面也有很多按钮,我们可以把这几个页面以及按钮对应的权限组合成一个权限组赋予角色。

假设系统有1000个用户,有1000种权限自成体系构成了100个权限组,100个权限组分配给100个角色,100个角色分配给10个用户组,则总共需要进行100x100(给角色分配权限组)+100x10(给用户组分配角色)+1000x10(给用户分配用户组)=21000次赋予权限操作。

8.分布式角色管理模型ARBAC(Administrative RBAC)

ARBAC模型的基本思想是利用RBAC模型本身来进行RBAC模型的管理,包括用户角色管理,权限角色管理,角色层次关系管理、限制管理等几个部分。

模型的管理员本身也具有角色,称作管理员角色,并且也有角色继承关系。管理员用户通过拥有管理员角色得到对角色继承关系的管理权。相对于非管理员的角色继承关系,管理员角色继承关系可以是一个单独的继承关系,并且该继承关系上的每个管理员角色将对应非管理员角色继承关系上的一部分管理区域,实现一种分工明确的分布式角色管理。
在这里插入图片描述
此模型添加了管理角色的定义,实现了用角色来管理角色。

ARBAC模型是基于角色的角色管理模型,包括三个部分:

URA:用户-角色指派。该组件涉及用户-指派关系UA的管理,该关系把用户与角色关联在一起。对该关系的修改权由管理角色控制,这样,管理角色中的成员有权管理正规角色中的成员关系。把一个用户指定为管理角色是在URA以外完成的,并假定是由安全员完成的。

PRA:角色-权限指派。该组件涉及角色-权限的指派与撤销。从角色观点来看,用户和权限有类似的特点,它们都是由角色联系在一起的实在实体。因此,可以把PRA看做是URA的对偶组件。

RRA:角色-角色指派。为了便于对角色的管理,对角色又进行了分类。该组件涉及3类角色,它们是:

  1. 能力(Abilities)角色——进以许可权和其他能力做成成员的角色。

  2. 组(Groups)角色——仅以用户和其他组为成员的一类角色。

  3. UP-角色——表示用户与权限的角色,这类角色对其成员没有限制,成员可以使用户、角色、许可权、能力、组或其他UP-角色。

区别这三类模型的主要原因是可以应用不同的管理模型去建立不同类型角色之间的关系。区分的动因首先是对能力的考虑,能力是许可权的集合,可以把该集合中所有许可权作为一个单位指派给一个角色。类似的,组是用户的集合,可以把该集合中所有许可权作为一个单位指派给一个角色。组和能力角色都似乎可以划分等级的。

在一个UP-角色中,一个能力是否是其的一个成员是由UP-角色是否支配该能力决定的,如果支配就是,否则就不是。相反的,如果一个UP-角色被一个组角色支配,则这个组就是该UP-角色的成员。

对ARBAC管理模型的研究还在继续之中,对能力-指派与组-指派的形式化已基本完成,对UP-角色概念的研究成果还未形式化。

二、RBAC模型概述及其他权限模型

(一)RBAC模型概述

RBAC 授权模型的基本思想是通过分配和取消角色来完成用户权限的授予和取消,根据不同的职能岗位划分角色,资源访问许可被封装在角色中。

用户通过赋予角色间接地访问系统资源和对系统资源进行操作。授权者根据需要定义各种角色,并设置合适的访问权限。而用户根据其工作性质和职责再被指派为不同的角色,完成权限授予。这样,整个访问控制过程就分成两个部分,即访问权限与角色相关联,角色再与用户关联,从而实现了用户与访问权限的逻辑分离。

在这里插入图片描述

RBAC模型包含五种基本元素:用户集合、角色集合、对象集合、操作集合、权限集合。
定义如下:

U={u1,u2,…,un}表示所有用户的集合。

R={r1,r2,…rn}表示所有角色的集合。

S={s1,s2,…,sn}表示所有会话的集合。会话是用户与激活的角色集合之间的映射。

Ops={ops1,ops2,…,opsn}表示所有操作的集合。

Object={obj1,obj2,…,objn}表示所有客体的集合。在不同系统中,客体的种类可能非常不同,例如,在操作系统中考虑的客体一般是诸如文件、目录、端口和设备筹,操作则为读取、写入、打开、关闭和运行等,在数据库系统中则是考虑诸如关系、表、视图、记录、字段和值等。

p=(Ops×Object)表示所有权限的集合。授权机制从某个角度看可以视为在系统内通过特定的操作(Operation)将主体与客体(数据或其他资源)联结起来,语义可以是允许读、允许修改和允许创建等。

PA ∈ P × R,从权限集合到角色集合的多对多映射,表示授予角色的权限。在信息系统中存在着多个角色,对每个角色设置了多个权限关系,称之为权限的赋予(PA)

UA ∈ U × R,从用户集合到角色集合的多对多映射,表示授予用户的角色。权限被赋予角色,而不是用户,当一个角色被指定给一个用户时,此用户就拥有了该角色所包含的权限。

RBAC模型中授权就是将这些客体的存取访问的权限在可靠的控制下连带角色所需要的操作一起提供给那些角色所代表的用户,通过授权的管理机制,可以授予一个角色多个权限,而一个权限也可以赋予多个角色,同时一个用户可以扮演多个角色,一个角色又可以接纳多个用户。

RBAC模型只是个理论模型,在实际使用中还是会有一些问题需要去扩展。接下来会谈到RBAC的一些相关概念的细节,限于篇幅,请查看本文的系列专栏——权限管理系统设计。

(二)其他权限模型

随着企业规模的扩大和商业业务新特点的出现,RBAC模型暴露出如下问题:

1.模型中安全策略的不平衡性。在RBAC模型中,研究的焦点一直集中在用户和角色所处的主体部分,其中包括角色与角色之间的继承关系,角色之间的约束关系一静态职责分离和动态职责分离;往往忽视客体部分。
2.权限泛滥,不具备时间性。也就是说创建角色后即把权限分配给角色,角色拥有的全部权限在角色激活后的所有时间内有效。但是,实际操作中,权限按照最小特权原则,角色只应拥有执行当前任务所必需的权限。
3.缺乏客体管理功能。企业规模的扩大和经营方式的改变使得客体数量日益庞大,人工管理客体的花销也日益增多,RBAC模型中没有提供基于角色的客体管理方法。
4.操作行为缺乏管理。RBAC模型中没有提供对操作行为的管理,但是和主体对象、客体对象一样,操作行为具有本身特有的安全特性,如果将其抽象出来概括成为操作角色,将会大大提高模型的可用性和灵活性。

1. 基于任务的访问权限管理分析(TBAC)

基于任务的访问权限管理(TBAC)是一种新型的安全模型,它采用“面向任务”的观点,从任务(活动)的角度来建立安全模型和实现安全机制,在任务处理的过程中提供动态实时的安全管理。

在TBAC中,对象的访问权限管理并不是静止不变的,而是随着执行任务的上下文环境发生变化,这是我们称其为主动安全模型的原因。具体说来,TBAC有两点含义,首先,它是在工作流的环境考虑对信息的保护问题。

在工作流环境中,每一步对数据的处理都与以前的处理相关,相应的访问权限管理也是这样,因而TBAC是一种上下文相关的访问权限管理模型。其次,它不仅能对不同工作流实行不同的访问权限管理策略,而且还能对同一工作流的不同任务实例实行不同的访问权限管理策略,所以它又是一种基于实例(Instance.based)的访问权限管理模型。因为任务都有时效性,所以在基于任务的访问权限管理中,用户对授予的权限的使用也是有时效性的。

最后,因为任务都有时效性,所以在基于任务的访问权限管理中,用户对于授予他的权限的使用也有时效性,保证了用户权限和任务执行的同步、对应统一。

2.基于属性的权限管理模型(ABAC)

为了内容的安全,运营经理小红向小王提了一个需求:负责内容管理的人员不可以在公司以外的地点发布内容。

这可难倒了小王,因为现有的RBAC权限模型仅能对页面/功能/数据赋予权限,没法执行如此精细的权限控制。在查阅相关资料后,小王找到了该问题的解决方法——基于属性的权限管理模型(ABAC)。

ABAC是通过动态计算一个或一组属性是否满足某种条件来进行授权判断的,包括用户属性(如性别年龄)、环境属性(如时间地点)、操作属性(如编辑删除)和对象属性(如一篇文章)。

跟RBAC相比,ABAC能够实现非常灵活的权限控制,可扩延展性也很高,几乎能满足所有类型的需求。但是设计起来比较复杂,而且对于单一属性可以通过编写简单的判断逻辑代替,所以还没有被广泛应用。

3.基于策略的权限管理模型(PBAC)

PBAC(Policy-Based Access Control)是一种基于策略的权限模型,它通过定义策略来管理访问控制。这些策略可以由管理员根据组织的需求进行定制,以决策具体的访问权限。PBAC模型允许更细粒度的控制,并支持动态的访问控制策略。

基于策略的权限管理模型(Policy-Based Access Control,PBAC)是一种先进的访问控制方法,它允许系统管理员通过定义和实施策略来控制用户对系统资源的访问。PBAC模型允许更细粒度的控制,并支持动态的访问控制策略,它结合了多种传统的访问控制模型的优点,如自主访问控制(DAC)、强制访问控制(MAC)和基于角色的访问控制(RBAC),并通过策略语言或规则来表达更为复杂和动态的访问控制逻辑。

优点:

灵活性和可扩展性:PBAC允许管理员通过编写策略来定义复杂的访问控制规则,这使得它能够适应不断变化的安全需求和业务环境。策略可以覆盖各种条件,如时间、地点、用户身份、资源状态等。
细粒度控制:PBAC能够实现非常细粒度的访问控制,管理员可以基于策略对不同资源和操作定义不同的访问级别,这对于需要高度定制化访问控制的应用场景特别有用。
动态调整:由于PBAC的规则是动态的,可以根据实时的上下文信息(如用户的位置、时间、设备类型等)来决定访问权限,这增加了系统的安全性并减少了过度授权的风险。
易于管理:通过策略语言,PBAC可以减少管理负担,因为复杂的权限组合可以通过简洁的策略表达式来实现,而不是通过大量的静态权限列表。
适应性:PBAC模型非常适合云环境和物联网(IoT)设备,这些环境中的资源和用户状态经常变化,需要动态调整访问控制策略。

缺点:

复杂性:PBAC的策略语言和规则可能变得非常复杂,特别是当需要处理大量用户和资源以及复杂的访问条件时,这可能导致策略的编写、理解和维护成为挑战。
性能问题:动态计算访问控制决策可能会影响系统的性能,尤其是在高并发环境中,每一次访问请求都需要解析策略并进行匹配。
错误和漏洞:复杂的策略可能引入难以发现的错误和漏洞,这可能被恶意用户利用来绕过访问控制。
学习曲线:使用PBAC的系统可能需要管理员和开发者花费更多时间去学习和理解策略语言,这可能增加培训和初期部署的成本。

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值