数据权限-模型简要分析

权限管控可以通俗的理解为权力限制,即不同的人由于拥有不同权力,他所看到的、能使用的可能不一样。对应到一个应用系统,其实就是一个用户可能拥有不同的数据权限(看到的)和操作权限(使用的)。

主流的权限模型主要分为以下五种:

  • ACL模型:访问控制列表

  • DAC模型:自主访问控制

  • MAC模型:强制访问控制

  • ABAC模型:基于属性的访问控制

  • RBAC模型:基于角色的权限访问控制

ACL模型:访问控制列表

Access Control List,ACL是最早的、最基本的一种访问控制机制,是基于客体进行控制的模型,在其他模型中也有ACL的身影。为了解决相同权限的用户挨个配置的问题,后来也采用了用户组的方式。

原理:每一个客体都有一个列表,列表中记录的是哪些主体可以对这个客体做哪些行为,非常简单。

例如:当用户A要对一篇文章进行编辑时,ACL会先检查一下文章编辑功能的控制列表中有没有用户A,有就可以编辑,无则不能编辑。再例如:不同等级的会员在产品中可使用的功能范围不同。

缺点:当主体的数量较多时,配置和维护工作就会成本大、易出错。

DAC模型:自主访问控制

Discretionary Access Control,DAC是ACL的一种拓展。

原理:在ACL模型的基础上,允许主体可以将自己拥有的权限自主地授予其他主体,所以权限可以任意传递。

例如:常见于文件系统,LINUX,UNIX、WindowsNT版本的操作系统都提供DAC的支持。

缺点:对权限控制比较分散,例如无法简单地将一组文件设置统一的权限开放给指定的一群用户。主体的权限太大,无意间就可能泄露信息。

MAC模型:强制访问控制

Mandatory Access Control,MAC模型中主要的是双向验证机制。常见于机密机构或者其他等级观念强烈的行业,如军用和市政安全领域的软件。

原理:主体有一个权限标识,客体也有一个权限标识,而主体能否对该客体进行操作取决于双方的权限标识的关系。

例如:将军分为上将>中将>少将,军事文件保密等级分为绝密>机密>秘密,规定不同军衔仅能访问不同保密等级的文件,如少将只能访问秘密文件;当某一账号访问某一文件时,系统会验证账号的军衔,也验证文件的保密等级,当军衔和保密等级相对应时才可以访问。

缺点:控制太严格,实现工作量大,缺乏灵活性。

ABAC模型:基于属性的访问控制

Attribute-Based Access Control,能很好地解决RBAC的缺点,在新增资源时容易维护。

原理:通过动态计算一个或一组属性是否满足某种机制来授权,是一种很灵活的权限模型,可以按需实现不同颗粒度的权限控制。

属性通常有四类:

  1. 主体属性,如用户年龄、性别等;

  2. 客体属性,如一篇文章等;

  3. 环境属性,即空间限制、时间限制、频度限制;

  4. 操作属性,即行为类型,如读写、只读等。

例如:早上9:00,11:00期间A、B两个部门一起以考生的身份考试,下午14:00,17:00期间A、B两个部门相互阅卷。

缺点:规则复杂,不易看出主体与客体之间的关系,实现非常难,现在应用的很少。

RBAC,基于角色的权限访问控制

Role-Based Access Control,核心在于用户只和角色关联,而角色代表对了权限,是一系列权限的集合。

RBAC三要素:

  1. 用户:系统中所有的账户

  2. 角色:一系列权限的集合(如:管理员,开发者,审计管理员等)

  3. 权限:菜单,按钮,数据的增删改查等详细权限。

RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。

角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。

角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系同样也存在继承关系防止越权。

优点:便于角色划分,更灵活的授权管理;最小颗粒度授权;

RBAC的深度拓展

RBAC模型可以分为:RBAC0RBAC1RBAC2RBAC3 四个阶段,一般公司使用RBAC0的模型就可以。另外,RBAC0相当于底层逻辑,后三者都是在RBAC0模型上的拔高。

我先简单介绍下这四个RBAC模型:

1. RBAC0模型

用户和角色、角色和权限多对多关系。

简单来说就是一个用户拥有多个角色,一个角色可以被多个用户拥有,这是用户和角色的多对多关系;同样的,角色和权限也是如此。

RBAC0模型如下图:没有画太多线,但是已经能够看出多对多关系。

2. RBAC1模型

相对于RBAC0模型,增加了角色分级的逻辑,类似于树形结构,下一节点继承上一节点的所有权限,如role1根节点下有role1.1role1.2两个子节点

角色分级的逻辑可以有效的规范角色创建(主要得益于权限继承逻辑),我之前做过BD工具(类CRM),BD之间就有分级(经理、主管、专员),如果采用RBAC0模型做权限系统,我可能需要为经理、主管、专员分别创建一个角色(角色之间权限无继承性),极有可能出现一个问题,由于权限配置错误,主管拥有经理都没有权限。

而RBAC1模型就很好解决了这个问题,创建完经理角色并配置好权限后,主管角色的权限继承经理角色的权限,并且支持针对性删减主管权限。

3. RBAC2模型

基于RBAC0模型,对角色增加了更多约束条件。

角色互斥,比较经典的案例是财务系统中出纳不得兼管稽核,那么在赋予财务系统操作人员角色时,同一个操作员不能同时拥有出纳和稽核两个角色。

角色数量限制,例如:一个角色专门为公司CEO创建的,最后发现公司有10个人拥有CEO角色,一个公司有10个CEO?这就是对角色数量的限制,它指的是有多少用户能拥有这个角色。

RBAC2 模型主要是为了增加角色赋予的限制条件,这也符合权限系统的目标:权责明确,系统使用安全、保密。

4. RBAC3模型

同样是基于RBAC0模型,但是综合了RBAC1RBAC2的所有特点

这里就不在多描述,读者返回去看RBAC1RBAC2模型的描述即可。

RBAC 权限管理的在实际系统中的应用

RBAC 权限模型由三大部分构成,即用户管理角色管理权限管理

用户管理按照企业架构或业务线架构来划分,这些结构本身比较清晰,扩展性和可读性都非常好。

角色管理一定要在深入理解业务逻辑后再来设计,一般使用各部门真实的角色作为基础,再根据业务逻辑进行扩展。

权限管理是前两种管理的再加固,做太细容易太碎片,做太粗又不够安全,这里我们需要根据经验和实际情况来设计。

1.用户管理

用户管理中的用户,是企业里每一位员工,他们本身就有自己的组织架构,我们可以直接使用企业部门架构或者业务线架构来作为线索,构建用户管理系统。

需要特殊注意:实际业务中的组织架构可能与企业部门架构、业务线架构不同,需要考虑数据共享机制,一般的做法为授权某个人、某个角色组共享某个组织层级的某个对象组数据。

2.角色管理

在设计系统角色时,我们应该深入理解公司架构、业务架构后,再根据需求设计角色及角色内的等级。

一般角色相对于用户来说是固定不变的,每个角色都有自己明确的权限和限制,这些权限在系统设计之处就确定了,之后也轻易不会再变动。

1. 自动获得基础角色

当员工入职到某部门时,该名员工的账号应该自动被加入该部门对应的基础角色中,并拥有对应的基础权限。这种操作是为了保证系统安全的前提下,减少了管理员大量手动操作。使新入职员工能快速使用系统,提高工作效率。

2. 临时角色与失效时间

公司业务有时需要外援来支持,他们并不属于公司员工,也只是在某个时段在公司做支持。此时我们需要设置临时角色,来应对这种可能跨多部门协作的临时员工。

如果公司安全级别较高,此类账号默认有固定失效时间,到达失效时间需再次审核才能重新开启。避免临时账号因为流程不完善,遗忘在系统中,引起安全隐患。

3. 虚拟角色

部门角色中的等级,可以授权同等级的员工拥有相同的权限,但某些员工因工作原因,需要调用角色等级之外的权限,相同等级不同员工需要使用的权限还不相同。

这种超出角色等级又合理的权限授予,我们可以设置虚拟角色。这一虚拟角色可集成这一工作所需的所有权限,然后将它赋予具体的员工即可。这样即不用调整组织架构和对应的角色,也可以满足工作中特殊情况的权限需求。

4. 黑白名单

白名单:某些用户自身不拥有某部门的顶级角色,但处于业务需求,需要给他角色外的高级权限,那么我们可以设计限制范围的白名单,将需要的用户添加进去即可。

在安全流程中,我们仅需要对白名单设计安全流程,即可审核在白名单中的特殊用户,做到监控拥有特殊权限的用户,减少安全隐患。

黑名单:比较常见的黑名单场景是某些犯了错误的员工,虽然在职,但已经不能给他们任何公司权限了。这种既不能取消角色关联,也不能完全停用账号的情况,可以设置黑名单,让此类用户可以登录账号,查看基本信息,但大多数关键权限已经被黑名单限制。

3. 权限管理

权限管理一般从三个方面来做限制。页面/菜单权限操作权限数据权限

1. 页面/菜单权限

对于没有权限操作的用户,直接隐藏对应的页面入口或菜单选项。这种方法简单快捷直接,对于一些安全不太敏感的权限,使用这种方式非常高效。

2. 操作权限

操作权限通常是指对同一组数据,不同的用户是否可以增删改查。对某些用户来说是只读浏览数据,对某些用户来说是可编辑的数据。

3. 数据权限

对于安全需求高的权限管理,仅从前端限制隐藏菜单,隐藏编辑按钮是不够的,还需要在数接口上做限制。如果用户试图通过非法手段编辑不属于自己权限下的数据,服务器端会识别、记录并限制访问。

4. 数据权限如何管控

数据权限可以分为行权限和列权限。行权限控制:看多少条数据。列权限控制:看一条数据的多少个字段

简单系统中可以通过组织架构来管控行权限,按照角色来配置列权限,但是遇到复杂情况,组织架构是承载不了复杂行权限管控,角色也更不能承载列的特殊化展示。

目前行业的做法是提供行列级数据权规则配置,把规则当成类似权限点配置赋予某个角色或者某个用户。

用户管理系统权限设计中的更多实践细节

1.超级管理员

超级管理员是用来启动系统,配置系统的账号。这个账号应该在配置好系统,创建管理员之后被隐藏起来。超级管理员账号拥有系统中全部权限,可穿梭查看各部门数据,如果使用不恰当,是系统管理的安全隐患。

2.互斥角色如何处理

当用户已经有用的角色和即将添加的角色互相互斥时,应该在添加新角色时,提示管理员因角色互斥的原因,无法进行新角色添加。如需添加,要先撤销掉前一个角色,再添加新角色。

3.用户管理权限系统设计一定要简单清晰

在设计权限系统之处,一定要理清思路,一切从简,能不增加的多余角色和权限逻辑,就一定不要增加。因为随着公司业务的扩大,权限和角色也会随之增多,如果初期设计思路不严谨,那么权限系统会随着业务的扩大而无限混乱下去,此时再来整理权限,已经太晚了。所以初期设计就一定要条理清晰,简单明了,能避免后续非常多不必要的麻烦。

4.无权提示页

有时员工 A 会直接给员工 B 分享他当下正在操作的页面,但有可能员工 B 无权查看。此时我们应该在这里考虑添加「无权提示页」,避免粗暴的 404 页面让员工 B 以为是系统出错了。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

VUE3相比VUE2升级了哪些内容

目录 一、Vue 3 、Vue 2 对比及提升项 二、 Vue 3 创建app.vue示例 三、Vue3 的setup、Vue2 的 data对比 一、Vue 3 、Vue 2 对比及提升项 性能提升:Vue 3 做了大量的优化工作,提升了运行时的性能。例如,在模板编译时进行的静态分析和优化…

第16集《佛法修学概要》

(三)定不定业(2) 请大家打开讲义第四十页,我们讲到定业跟不定业。 定业就是说,这个业的结构非常坚固,它有主动得果报的力量,不必有其他的因缘就会主动跑出来,甚至于在今…

Qt构建MSVC2015环境过程

Qt构建MSVC2015环境过程 前言 之前用的Qt都是基于默认的MinGW编译器,由于目前工作的QT界面主要是跑在X86上,所以记录一下Qt配置MSVC2015的配置过程。根据查阅了解以后,个人理解的MinGW跟MSVC的区别在于前者主要是用于跨平台程序构建&#x…

Vue项目在本地跑起来 所有路径前面想加入前缀进行访问配置

一、业务场景: 在本地项目跑起来了,访问时想在所有路径后面加dev进行访问 二、目前效果 三、具体实现步骤: (1)实现静态文件加前缀 在vue.config.js文件里改变路径 publicPath: process.env.NODE_ENV "product…

苹果Find My查找芯片-伦茨科技ST17H6x支持苹果Find My认证

Apple「查找」Find My可通过庞大的“Apple Find My Network” 实现全球查找功能。无数iOS、iPadOS、macOS、watchOS激活设备与Find My 设备结合在一起,无需连接到Wi-Fi或者蜂窝网络,用户也可以给遗失的设备定位。对于任何iOS、iPadOS、macOS、watchOS设备…

C语言中的预处理

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

Golang 交叉编译之一文详解

博客原文 文章目录 Golang 中的交叉编译不同操作系统间的编译Linux 下编译windowsmacos windows 下编译Linuxmacos macos 下编译Linuxwindows 不同架构下的编译amd64x86 参考 Golang 中的交叉编译 在 Golang 中,交叉编译指的是在同一台机器上生成针对不同操作系统或…

MySQL之子查询、连接查询(内外)以及分页查询(实操)

文章目录 前言一、SQL脚本二、实操以及实现思路 前言 续上篇博主MySQL之视图&索引&执行计划这篇给大家讲解MySQL之子查询、连接查询(内&外)以及分页查询 一、SQL脚本 /*Navicat Premium Data TransferSource Server : localhostSource Server Type :…

文字识别与光学字符识别有什么区别?

随着科技的不断发展,文字识别和光学字符识别技术已经成为我们日常生活和工作中不可或缺的一部分。然而,许多人对于这两者之间的区别并不十分清楚。本文将详细探讨文字识别与光学字符识别之间的差异,以帮助读者更好地理解这两种技术。 文字识…

ASP.NET中小型超市管理系统源码

ASP.NET中小型超市管理系统源码 超市管理系统是专门为中小型超市打造的管理系统,可以方便管理时更加准确清晰的查看商品信息, 仓库出售与进货的信息,还有每一个部门员工的信息,也更加直观的体现出每一阶段的商品销售情况&#xf…

拦截器HandlerInterceptor | springmvc系列

拦截器,通俗来来将,就是我们将访问某个路径的请求给拦截下来,然后可以对这个请求做一些操作 基本使用 创建拦截器类 让类实现HandlerInterceptor接口,重写接口中的三个方法。 Component //定义拦截器类,实现Handle…

嵌入式Qt-动手编写并运行自己的第1个ARM-Qt程序

介绍了如何搭建在Linux开发板中搭建Qt的运行环境,并测试了Qt自带的例程。 本篇,来介绍如何自己编写一个Qt程序,并将编译结果放到Linux开发板中运行。 1 Windows上编写Qt程序 因为Qt是支持跨平台的,所以我们可以先在Windows平台…

【基础工具篇使用】ADB 的安装和使用

文章目录 ADB的命令安装ADB 命令使用查看帮助 ——adb help查看连接设备 ADB的命令安装 ADB 命令的全称为“Android Debug Bridge”,从英文中看出主要是用作安卓的调试工具。ADB 命令在嵌入式开发中越来越常用了 在 Windows 上按“win”“R”组合件打开运行, 输入 …

Java数据结构之装箱拆箱

装箱和拆箱 也叫装包拆包,装包是把那八种基本数据类型转换为它的包装类,拆包则相反 上面这俩种方式都是装包,下面是它的字节码文件 用到了Integer的ValueOf方法: 就是返回了一个Integer类的对象,把它的value属性设置成…

手机远程控制电脑_手机操作电脑方法

在我们的日常生活和工作中,有时候我们需要从外面访问家里或公司的电脑。这听起来可能很复杂,但实际上非常简单。今天,我们将分享如何使用手机远程控制电脑。 首先,您需要在电脑上安装KKView远程控制软件,该软件提供手…

【sklearn练习】preprocessing的使用

介绍 scikit-learn 中的 preprocessing 模块提供了多种数据预处理工具,用于准备和转换数据以供机器学习模型使用。这些工具可以帮助您处理数据中的缺失值、标准化特征、编码分类变量、降维等。以下是一些常见的 preprocessing 模块中的功能和用法示例: …

玩转Mysql 五(MySQL索引)

一路走来,所有遇到的人,帮助过我的、伤害过我的都是朋友,没有一个是敌人。如有侵权,请留言,我及时删除! 一、索引的数据结构 1、MySQL官方对索引的定义为:索引(Index)是…

操作系统期末复习笔记(持续更新..)

一、操作系统的基本概念 1.1 操作系统概念 控制和管理整个计算机系统的硬件与软件资源。合理地组织、调度计算机的工作与资源。为用户和其他软件提供方便接口与环境的程序集合。 1.2 操作系统的特征 特征:并发,共享,虚拟,异步…

Hyperledger Fabric 通道配置文件解析

fabric 版本 v2.4.1 Fabric 网络是分布式系统,采用通道配置(Channel Configuration)来定义共享账本的各项行为。通道配置的管理对于网络功能至关重要。 通道配置一般包括通道全局配置、排序配置和应用配置等多个层级,这些配置都存…

Chrome您的连接不是私密连接或专用连接

方法一: 在当前页面用键盘输入 thisisunsafe ,不是在地址栏输入,就直接敲键盘就行了因为Chrome不信任这些自签名ssl证书,为了安全起见,直接禁止访问了,thisisunsafe 这个命令,说明你已经了解并…