三种权限模型该如何选择

news2024/9/21 8:04:32

在构建企业级平台或复杂应用系统时,权限管理是一个至关重要的环节。它决定了哪些用户可以访问哪些资源,以及可以进行哪些操作,一个健全的权限管理架构,在确保系统正常运行的同时,也能有效防止数据泄露和非法访问,从而为企业带来可信赖的信息保障。选择合适的权限模型,不仅能保障系统的安全性,还能提升管理效率。为了满足身份管理法规要求并规避风险,企业必须清点、分析和管理用户的访问权限。然而,面对多种不同的权限模型,企业应该如何做出正确的选择呢?

权限管理面临困境

权限复杂度增加,管理难度加大

随着企业规模的扩大和业务的多样化,权限管理的复杂性也随之增加。不同部门、岗位、员工的权限需求各不相同,加之企业内部组织结构的频繁变动,导致权限的设置和调整变得非常复杂。管理者可能难以全面掌控每个用户的具体权限,容易出现权限交叉、权限重叠、或不必要的权限扩大,导致管理难度加大。权限的无序扩展不仅增加了管理者的工作负担,还可能导致敏感数据的泄漏和滥用风险。但传统权限管理方法无法实现细粒度的权限授予,缺乏统一的权限实体,难以贴合业务现况。

权限变更不及时,安全隐患增加

企业中的权限变更往往滞后于实际的业务需求。例如,当员工离职、岗位调动或职责发生变化时,权限可能不会及时调整或撤销,导致前员工仍然拥有对敏感系统或数据的访问权限。权限延迟会增加数据泄露和系统滥用的风险。如果员工岗位调动时,权限未及时更新,新岗位的员工可能获得不必要的权限,而旧岗位的权限则可能被滥用,为企业的数据安全带来了极大的风险。

缺乏统一标准,权限管理不规范

在缺乏统一权限管理标准的企业中,权限分配往往依赖于个人的判断或临时需求,导致权限设置不一致,缺乏系统性和规范性。不同部门或系统可能采用不同的权限管理方法,增加了整体管理的复杂性,也可能导致权限管理的盲点或疏漏,最终影响企业的安全性和合规性。例如,在某个部门中,员工的权限可能是根据其直接主管的判断分配的,而在另一个部门,权限分配则可能基于过去的惯例或紧急情况的需要。但差异化的权限管理方法,虽然在短期内能够满足部门的需求,但长期来看,会给企业的整体管理带来极大的复杂性。

在面对权限管理中的诸多挑战时,企业引入权限模型来管理员工权限显得尤为重要。通过权限模型,企业能够更加系统化、规范化地管理和分配员工的权限,避免权限设置的混乱和不一致,提升管理效率,并有效减少安全隐患。但三种权限模型分别是哪三种?他们之间有何区别?企业应该如何选择呢?

 

三大权限模型介绍

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

基于角色的访问控制(Role-based access control,简称 RBAC),指的是通过用户的角色(Role)授权其相关权限,这实现了更灵活的访问控制,相比直接授予用户权限,要更加简单、高效、可扩展。

 

当使用 RBAC 时,通过分析系统用户的实际情况,基于共同的职责和需求,授予他们不同角色。你可以授予给用户一个或多个角色,每个角色具有一个或多个权限,这种 用户-角色、角色-权限 间的关系,让我们可以不用再单独管理单个用户,用户从授予的角色里面继承所需的权限。

以一个简单的场景(Gitlab 的权限系统)为例,用户系统中有 Admin、Maintainer、Operator 三种角色,这三种角色分别具备不同的权限,比如只有 Admin 具备创建代码仓库、删除代码仓库的权限,其他的角色都不具备。

我们授予某个用户「Admin」这个角色,他就具备了「创建代码仓库」和「删除代码仓库」这两个权限。不直接给用户授权策略,是为了之后的扩展性考虑。比如存在多个用户拥有相同的权限,在分配的时候就要分别为这几个用户指定相同的权限,修改时也要为这几个用户的权限进行一一修改。有了角色后,我们只需要为该角色制定好权限后,给不同的用户分配不同的角色,后续只需要修改角色的权限,就能自动修改角色内所有用户的权限。

什么是基于属性的访问控制(ABAC)

ABAC 是一种基于用户属性、资源属性、环境属性和操作属性等多种属性进行访问控制的权限管理模型。通过将这些属性进行组合和关联,形成一个多维度的访问控制策略,实现动态的访问控制。当用户发起访问请求时,ABAC 会根据请求中的属性信息和预先定义的策略进行匹配和评估,最终决定是否允许该请求。适用于需要细粒度访问控制、权限策略需要动态调整的场景。

ABAC主要包括策略定义和策略评估两个过程:

策略定义:策略定义决定了哪些用户可以访问哪些资源,以及如何进行访问控制。策略定义可以通过编写规则、表达式或脚本等方式来实现。

策略评估:当用户发起访问请求时,ABAC 的评估引擎会根据请求中的属性信息和策略规则进行匹配和计算,最终得到一个访问控制决策结果。

在系统中实现 ABAC 需要考虑到系统的架构、性能、安全性等因素。一般来说,可以将 ABAC 作为一个独立的权限管理模块集成到系统中,或者将 ABAC 的实现与现有的 RBAC 或其他权限管理模型进行结合。ABAC 基于用户、资源、环境等多种属性实现高度细粒度的权限控制,可以根据属性变化实时调整权限。适用于需要处理大量数据和用户,需要动态和细粒度管控以及确保不同租户之间的数据隔离等对数据安全和隐私保护有严格要求的场景。

什么是下一代访问控制模型 (NGAC )

NGAC,即下一代访问控制。NGAC 可以实现系统化、策略一致的访问控制方法,以高精细度授予或拒绝用户管理能力。NGAC 使用图的概念以简单、集中的方式管理访问。它可以在任何组织规模下线性扩展,并且不会出现性能问题。它最大的好处是灵活性——它可以允许基于对象属性、时间、位置或任何其他标准进行访问。NGAC 的另一个独特功能是它支持实时访问,例如,它可以授予承包商对资源的一次性访问权以进行维护,然后自动撤销访问权。

面向场景

NGAC 是基于这样一个假设:你可以用一个图来表示你要保护的系统,这个图代表了你要保护的资源和你的组织结构,这个图对你有意义,并且符合你的组织语义。在这个对你的组织非常特殊的模型之上,你可以叠加策略。在资源模型和用户模型之间,定义了权限。其本质上就是创建了一个图,以对每个组织都有意义的方式对用户想要保护的资源和组织结构进行建模。基于此自定义的组织模型,管理员可以添加访问策略和权限。这样 NGAC 提供了一种优雅的方式来表示你要保护的资源,系统中的不同角色,以及如何用权限把这两个世界联系在一起。

我该如何选择使用哪种权限模型

在这里,组织的规模是至关重要的因素。由于 ABAC 最初的设计和实施困难,对于小型企业而言,考虑起来可能太复杂了。对于中小型企业,RBAC 是 ABAC 的简单替代方案。每个用户都有一个唯一的角色,并具有相应的权限和限制。当用户转移到新角色时,其权限将更改为新职位的权限。这意味着,在明确定义角色的层次结构中,可以轻松管理少量内部和外部用户。

但是,当必须手动建立新角色时,对于大型组织而言,效率不高。一旦定义了属性和规则,当用户和利益相关者众多时,ABAC 的策略就更容易应用,同时还降低了安全风险。

简而言之,如果满足以下条件,请选择 ABAC:

你在一个拥有许多用户的大型组织中;

你需要深入的特定访问控制功能;

你有时间投资远距离的模型;

你需要确保隐私和安全合规;

但是,如果满足以下条件,请考虑 RBAC:

你所在的是中小型企业;

你的访问控制策略广泛;

你的外部用户很少,并且你的组织角色得到了明确定义;

如果想要更加细粒度的权限模型,请考虑 NGAC:

NGAC 通过采用一种新颖且巧妙的方法,解决了传统访问控制模型中的这些不足:它在用户提供的现有世界表示之上叠加访问策略。在 NGAC 模型中,你同样可以对 RBAC 和 ABAC 策略进行建模。在 ABAC(基于属性的访问控制)中,需要持续跟踪所有对象的属性,给管理带来了极大的负担。而 RBAC(基于角色的访问控制)虽然减少了这一负担,因为它提取了所有角色的访问信息,但这种模式容易导致角色爆炸问题,最终同样难以管理。而 NGAC 以一种紧凑、集中的方式提供了我们所需的一切,简化了管理的复杂性。

下表从几个方面对 ABAC、RBAC 和 NGAC 进行了比较。

 

 

如何将权限模型集成至你的应用

集成 RBAC 权限模型到你的应用系统

创建角色

你可以使用 Authing 控制台创建角色:在权限管理 - 角色管理中,点击添加角色按钮:

· 角色 code: 该角色的唯一标志符,权限分组内具有唯一性,只允许包含英文字母、数字、下划线 _、横线 -,这里我们填 admin。

· 角色描述:该角色的描述信息,这里我们填管理员。

授权用户角色

在角色详情页面,你可以将此角色授权给用户。你可以通过用户名、手机号、邮箱、昵称搜索用户。选择用户之后点击确认,你可以查看被授权此角色的用户列表。

 

在后端通过用户角色控制权限

当用户成功认证、获取到 Token 之后,你可以解析到当前用户的 ID,接下来你可以使用我们提供的 API & SDK 在后端获取该用户被授予的角色,

这里以 Node SDK 为例,我们同时还支持 Python、Java、C#、PHP 等语言的 SDK 。

首先获取用户的被授予的所有角色列表:

import { ManagementClient } from 'authing-js-sdk'const managementClient = new ManagementClient({userPoolId: 'YOUR_USERPOOL_ID',secret: 'YOUR_USERPOOL_SECRET',})const { totalCount, list } = await managementClient.users.listRoles('USER_ID')

得到用户的所有角色之后,我们可以判断该用户是否具备 devops 这个角色:

if (!list.map((role) => role.code).includes('devops')) {throw new Error('无权限操作!')}

创建资源

上一步我们通过用户是否具备某个角色来控制权限,这种权限控制还是比较粗粒度的,因为只判断了用户是否具备某个角色,而没有判断其是否具备某个特定的权限。Authing 在基于角色的访问控制模型(RBAC)的基础上,还能够围绕资源进行更细粒度的授权。

你可以把系统的一些对象抽象为资源,在这些资源上可以定义了一些操作。比如在本文的场景中,Repository、Tag、PR、Release Notes 都是资源,且这些资源都有对应的操作:

· Repository:创建、删除等。

· PR:开启、评论、合并等。

· Tag:创建、删除等。

· Release Notes:创建、阅读、编辑、删除等。

授权角色操作资源的权限

Authing 还同时支持给用户、角色授权,如果用户在某个角色中,他也将继承这个角色被授权的权限。所以 Authing 既能够实现标准的 RBAC 权限模型,也能在这基础上进行更细粒度、更动态的权限控制。

比如下面这个例子中,我们给 admin 这个角色授权了 repository 资源的 Create 和 Delete 权限:

 

集成 ABAC 权限模型到你的应用系统

在上面介绍了如何将 RBAC 权限模型的集成方法,相信你也意识到了,RBAC 权限模型是静态的,也就是没有环境、对象属性等动态属性参与,所以很难实现类似于以下场景的访问控制:

· 当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档;

· 当用户是一个文档的拥有者并且文档的状态是草稿,用户可以编辑这个文档;

· 早上九点前禁止 A 部门的人访问 B 系统;

· 在除了上海以外的地方禁止以管理员身份访问 A 系统;

ABAC 的主要组成部分

在 ABAC 中,一个操作是否被允许是基于对象、资源、操作和环境信息共同动态计算决定的。

· 对象:对象是当前请求访问资源的用户。用户的属性包括ID,个人资源,角色,部门和组织成员身份等;

· 资源:资源是当前访问用户要访问的资产或对象(例如文件,数据,服务器,甚至API)。资源属性包含文件的创建日期,文件所有者,文件名和类型以及数据敏感性等等;

· 操作:操作是用户试图对资源进行的操作。常见的操作包括“读取”,“写入”,“编辑”,“复制”和“删除”;

· 环境:环境是每个访问请求的上下文。环境属性包含访问尝试的时间和位置,对象的设备,通信协议和加密强度等。

ABAC 如何使用属性动态计算出决策结果

在 ABAC 的决策语句的执行过程中,决策引擎会根据定义好的决策语句,结合对象、资源、操作、环境等因素动态计算出决策结果。每当发生访问请求时,ABAC 决策系统都会分析属性值是否与已建立的策略匹配。如果有匹配的策略,访问请求就会被通过。

例如,策略「当一个文档的所属部门跟用户的部门相同时,用户可以访问这个文档」会被以下属性匹配:

· 对象(用户)的部门 = 资源的所属部门;

· 资源 = “文档”;

· 操作 = “访问”;

策略「早上九点前禁止 A 部门的人访问B系统;」会被以下属性匹配:

· 对象的部门 = A 部门;

· 资源 = “B 系统”;

· 操作 = “访问”;

· 环境 = “时间是早上 9 点”。

在 Authing 中授权资源的时候指定限制条件

我们在授权资源的时候,可以指定限制条件。例如在下面的例子中,我们添加了一个限制条件:要求当前请求的用户经过了 MFA 认证。

除了 MFA 认证这个属性外,你还可以在 Authing 的策略引擎上下文中获取以下属性:

· 用户对象属性,如性别、组织机构、分组、角色、邮箱是否验证、手机号是否验证、自定义数据、是否经过了 MFA 认证、用户上次 MFA 认证时间等;

· 环境属性:客户端 IP、客户端 UA、客户端浏览器、请求来源国家、请求来源省份、请求来源城市等;

· 资源属性:资源创建时间、资源拥有者、资源标签等;

你可以根据这些属性组成灵活的策略授权语句。

集成 NGAC 权限模型到你的应用系统

NGAC 是最好的一种模型。选择 NGAC 的理由其实和选择图数据库还是关系型数据库上做对比。为什么选择图数据库?因为业务是不断变化的,这就导致了数据模型是经常变化的,用关系型数据库需要不停变更元字段、关联关系和查询语句以匹配业务需求,而用图模型只需要改变两个数据之间的连接关系,如下所示:

 

同样是表示一种多层级关系,用图数据库是符合人类的直觉的,而用关系型数据库,却需要建多个表做联合查询。不管是 RBAC 还是 ABAC 都是关系型数据库的关联关系模型,而 NGAC 是跳脱出关联模型的图模型,这也是为什么 NGAC 被称作下一代访问控制。虽然 NGAC 模型已经很好,但以上所有这些模型都有一个致命的缺陷 —— 没有计算能力。而 OPA 是具有计算能力的 NGAC 模型。OPA 就是遵循同样理念的,对权限模型重新设计的权限编程语言。他既有 NGAC 的表现能力,又有 Prolog 的计算能力。

Authing 将 OPA 作为决策引擎,改善自适应认证、自适应 MFA 和持续认证能力,底层模型全面改由 OPA 支撑,并为用户提供 Rego 编程语言达到完全定制化的权限模型定义和计算。Authing IDaaS 提供基于 OPA 引擎的 RBAC & ABAC 权限管理模型,既可以管理业务中的实体资源,也可以管理数据、API、菜单、按钮等细颗粒度权限控制。不仅如此,Authing IDaaS 完善 OPA 计算监控、请求监控、决策监控、决策设计器、代码编写,覆盖决策和决策计算的全生命周期,成为下一代决策引擎和风控引擎。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2100656.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

antd:手写走马灯vue组件

在使用ant-design-vue做走马灯的时候,封装的组件的自由度太低,难以实现想要的效果,于是本人自己写了一个走马灯组件,以方便代码复用。本文将介绍如何在vue框架中,使用ant-design-vue手动实现走马灯组件效果。 结果如下图所示, 一、使用说明 使用时,直接创建一个组件,…

.NET 最好用的验证组件 FluentValidation

目录 前言 项目介绍 项目使用 1、安装FluentValidation 2、Program.cs 3、Startup.cs 4、版本兼容 5、支持的验证器 6、可扩展 7、Swagger 模型和验证器 8、包含验证器 高级用法 1、异步验证 2、条件验证 3、自定义验证规则 4、自定义错误消息 项目地址 总结 …

comfyui替换电商模特工作流,模特们要真的要失业了吗?

前言 comfyui生态的丰富绝对是电商行业的福利,有助于电商老板们开源节流,废话不多说本着追求进步进一步理解comfyui工作流的搭建逻辑,我们来拆解电商模特替换这个工作流! 老规矩一句话说工作流原理,1.借助XL-tile修改…

Funsound: 快速为你的视频加上字幕

Funsound是基于阿里达摩院funasr开发的中文语音识别工具,其paraformer非自回归解码速度超快,同时预训练模型识别精度业界领先。本文将简要介绍funsound下如何快速为你的视频添加字幕,十分简单方便。 1. 上传音视频识别 & 导出SRT 打开fu…

无人机之飞行速度篇

无人机的飞行速度是一个复杂且多变的参数,它受到多种因素的影响。以下是对无人机飞行速度及其影响因素的详细分析: 一、无人机飞行速度概述 无人机的飞行速度通常以其在不同飞行模式下的水平飞行速度来衡量,如平稳挡(Cine&#x…

关于武汉高芯coin417G2红外机芯的二次开发

文章目录 前言一、外观和机芯参数二、SDK的使用1、打开相机2、回调函数中获取全局温度和图像3、关闭相机 前言 最近工作中接触了一款基于武汉高芯科技有限公司开发的红外模组,即coin417g2(测温型)9.1mm镜头.使用此模组,开发了一套红外热成像检测桌面应用程序.下面简单记录下该…

踩坑记录(序列化与反序列化)

问题描述 实体类中设定字段名称为 sValue和yValue 返回给前段后,变成了svalue,yvalue 字段设置 测试结果:与字段不符,匹配失败 解决方法 在字段上添加JsonProperty("字段名")注解

乌班图部署若依(nginx)

Nginx 什么是Nginx Nginx(发音为"engine x")是由俄罗斯开发者Igor Sysoev创建的一款轻量级、高性能的Web服务器。它首次发布于2004年,如今已成为全球最受欢迎的Web服务器之一。Nginx以其卓越的性能和灵活性而闻名,适用…

[240903] Qwen2-VL: 更清晰地看世界 | Elasticsearch 再次拥抱开源!

目录 Qwen2-VL: 更清晰地看世界Elasticsearch 再次拥抱开源! Qwen2-VL: 更清晰地看世界 历经一年研发,阿里云推出新一代视觉语言模型 Qwen2-VL,支持多语言、长视频理解、视觉推理及智能体交互,性能超越 GPT-4o 等模型&#xff0c…

Oracle 常用函数大全

文章目录 一、空校验1. NVL 空校验2. COALESCE 空校验 二、排序1. ORDER BY 排序2. ORDER BY DECODE 指定值排序 三、排名1. RANK 排名2. DENSE RANK 密集排名 四、限制条数1. ROWNUM 限制2. FETCH 限制 五、字符串处理1. TO_CHAR 字符串转换2. || 字符串拼接3. CONCAT 字符串拼…

9.2C++

思维导图

咸鱼代写代码的都是什么人?真的能有收入么?

大家好,我是程序员鱼皮。看到一个帖子,是一位博主分享自己读研期间在咸鱼上靠帮别人代写代码接单的经历。由于内容过于真实,看完之后竟让我有些红温了。 我估计也有很多学编程的同学想自己接单帮别人代写代码,那代写代码真的能有收…

聚水潭ERP集成用友U8(用友U8主供应链)

源系统成集云目标系统 用友U8介绍 用友U8是一套企业级的解决方案,可满足不同的制造、商务模式下,不同运营模式下的企业经营管理。它全面集成了财务、生产制造及供应链的成熟应用,并延伸客户管理至客户关系管理(CRM)&…

支付宝开放平台-开发者社区——AI 日报「9 月 3 日」

1 逛完世界机器人大会,投资人说再也不想投人形机器人了 腾讯科技丨阅读原文 在2024 年世界机器人大会上,尽管人形机器人成为焦点,但一位长期关注该领域的投资人表示不再考虑投资。原因是目前人形机器人在工业和家用场景中表现不够突出&…

Error when attempting to add data source to Azure OpenAI api

题意:尝试向 Azure OpenAI API 添加数据源时出现错误 问题背景: My code is working for a call to Azure OpenAI when I dont have a datasource added. However, when I do add my datasource with the following parameters I get an error: 当我没…

AIGC时代从新手到高手:B端竞品分析实战案例与技巧分享

文章目录 1)B端产品的信息获取困难2)B端产品标准化程度低3)需要具备业务知识1)竞品画布就像一个菜谱,帮助新手快速上手2)竞品画布相当于竞品分析报告的MVP(最小可用产品)&#xff0c…

新手如何下载微信视频号里面的短视频?推荐7种方法!

根据大数据分析我们发现还有不少用户不知道如何使用微信视频号下载视频?对此也发现不少小伙伴对内容阅读有所差异,对此专门为大家整理了图文以及视频相关教程,希望对大家有所帮助。 短视频下载 短视频下载一般包括市面上大部分的短视频内容为…

【BES2500x系列 -- RTX5操作系统】Battery模块 -- 创建电池检测定时器 --(十五)

💌 所属专栏:【BES2500x系列】 😀 作  者:我是夜阑的狗🐶 🚀 个人简介:一个正在努力学技术的CV工程师,专注基础和实战分享 ,欢迎咨询! &#x1f49…

【Linux】进程状态(RSDT 阻塞 僵尸 孤儿)

目录 进程状态 进程状态的查看 R和S 运行状态 T/t 暂停状态 kill命令 D (disk sleep)状态、 Z 状态(僵尸状态) 孤儿状态 运行状态 阻塞状态 进程状态 一个进程通常有三种状态 ◉ 就绪状态(Ready&#xff0…

Qt 去掉QDialog对话框的问号

QT 对话框的问号是什么? QDialog默认的window flag中包含了Qt::WindowContextHelpButtonHint,这个flag意思是在窗口上提供“上下文帮助”按钮 使用方式/调用方式 void QWidget::setWhatsThis(const QString &)比如: ui->lineEdit_1->setWh…