权限系统设计及RBAC模型_rbac权限模型-程序员宅基地

技术标签: 设计  java  1024程序员节  

目录

概述

简介

ACL

DAC

MAC

ABAC

RBAC

RBAC

阶段

RBAC0模型

RBAC1模型

RBAC2模型

RBAC3模型

应用

其他注意事项

问题

参考


概述


对于一个企业级的平台或系统或站点,权限模块或系统是必不可少的。权限管控,即权力限制,不同的人由于拥有不同权力,他所看到的、能使用的东西不一样。对应到一个应用系统,其实就是一个用户可能拥有不同的数据权限(看到的)和操作权限(使用)。数据包括:菜单、列表、记录详情等,操作包括:新增,查看,编辑,删除等。

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

ACL模型:访问控制列表
DAC模型:自主访问控制
MAC模型:强制访问控制
ABAC模型:基于属性的访问控制
RBAC模型:基于角色的权限访问控制


简介

ACL


访问控制列表,Access Control List,ACL是最早的、最基本的一种访问控制机制,是基于客体进行控制的模型,在其他模型中也有ACL的身影。为了解决相同权限的用户挨个配置的问题,后来也采用用户组的方式。
原理:每一个客体都有一个列表,列表中记录的是哪些主体可以对这个客体做哪些行为,非常简单。
例如:当用户A要对一篇文章进行编辑时,ACL会先检查一下文章编辑功能的控制列表中有没有用户A,有就可以编辑,无则不能编辑。再例如:不同等级的会员在产品中可使用的功能范围不同。
缺点:当主体的数量较多时,配置和维护工作就会成本大、易出错。

DAC


自主访问控制,Discretionary Access Control,ACL的一种拓展。
原理:在ACL模型的基础上,允许主体可以将自己拥有的权限自主地授予其他主体,所以权限可以任意传递。
例如:常见于文件系统,LINUX等操作系统都提供DAC的支持。
缺点:对权限控制比较分散,例如无法简单地将一组文件设置统一的权限开放给指定的一群用户。主体的权限太大,无意间就可能泄露信息。

MAC


强制访问控制,Mandatory Access Control,MAC模型中主要的是双向验证机制。常见于机密机构或者其他等级观念强烈的行业,如军用和市政安全领域的软件。
原理:主体有一个权限标识,客体也有一个权限标识,而主体能否对该客体进行操作取决于双方的权限标识的关系。
例如:将军分为上将>中将>少将,军事文件保密等级分为绝密>机密>秘密,规定不同军衔仅能访问不同保密等级的文件,如少将只能访问秘密文件;当某一账号访问某一文件时,系统会验证账号的军衔,也验证文件的保密等级,当军衔和保密等级相对应时才可以访问。
缺点:控制太严格,实现工作量大,缺乏灵活性。

ABAC


基于属性的访问控制,Attribute-Based Access Control,能很好地解决RBAC的缺点,在新增资源时容易维护。
原理:通过动态计算一个或一组属性是否满足某种机制来授权,是一种很灵活的权限模型,可以按需实现不同颗粒度的权限控制。
属性通常有四类:

主体属性,如用户年龄、性别等;
客体属性,如一篇文章等;
环境属性,即空间限制、时间限制、频度限制;
操作属性,即行为类型,如读写、只读等。
例如:早上9:00,11:00期间A、B两个部门一起以考生的身份考试,下午14:00,17:00期间A、B两个部门相互阅卷。
缺点:规则复杂,不易看出主体与客体之间的关系,实现非常难,现在应用的很少。

RBAC


基于角色的权限访问控制,Role-Based Access Control。每个用户可以拥有多个角色,每个角色可以拥有多个权限。核心在于用户只和角色关联,而角色代表权限,是一系列权限的集合。基于角色的访问控制遵守最小特权,应该授予所需要的完成其任务的最小角色,这样可以防止用户干坏事。

RBAC三要素:

用户:系统中所有的账户
角色:一系列权限的集合(如:管理员,开发者,审计管理员等)
权限:菜单,按钮,数据的增删改查等详细权限。
在RBAC中,权限与角色相关联,用户通过成为适当角色的成员而得到这些角色的权限。

角色是为了完成各种工作而创造,用户则依据它的责任和资格来被指派相应的角色,用户可以很容易地从一个角色被指派到另一个角色。角色可依新的需求和系统的合并而赋予新的权限,而权限也可根据需要而从某角色中回收。角色与角色的关系同样也存在继承关系防止越权。

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


RBAC


RBAC是一种用户-角色-权限的授权模型,RBAC模型可以分为:RBAC0基本模型、RBAC1角色的分层模型、RBAC2约束模型、RBAC3统一模型四个阶段,一般公司使用RBAC0的模型就可以。RBAC0相当于底层逻辑,后三者都是在RBAC0模型上的拔高。

阶段


RBAC0模型


用户和角色、角色和权限多对多关系。一个用户可以拥有多个角色,一个角色可以被多个用户拥有,用户和角色是多对多关系;同样角色和权限也是多对多关系。RBAC0模型如下图:


RBAC1模型


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

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

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

RBAC2模型


基于RBAC0模型,对角色增加更多约束条件,引入互斥角色的限制。还约束一个用户拥有的角色是有限的,一个角色拥有的权限是有限的,以及想要获取较高权限,首先需要拥有一个低级权限

如角色互斥,比较经典的案例是财务系统中出纳不得兼管稽核,则在赋予财务系统操作人员角色时,同一个操作员不能同时拥有出纳和稽核两个角色。
如角色数量限制,如:一个公司的CEO角色只能有1个。限制有多少用户能拥有这个角色。
RBAC2模型主要是为了增加角色赋予的限制条件,这也符合权限系统的目标:权责明确,系统使用安全、保密。

RBAC3模型


同样是基于RBAC0模型,但是综合RBAC1和RBAC2的所有特点。

应用


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

用户管理按照企业架构或业务线架构来划分,这些结构本身比较清晰,扩展性和可读性都非常好。
角色管理一定要在深入理解业务逻辑后再来设计,一般使用各部门真实的角色作为基础,再根据业务逻辑进行扩展。
权限管理是前两种管理的再加固,做太细容易太碎片,做太粗又不够安全,这里我们需要根据经验和实际情况来设计。

  1. 用户管理
    用户管理中的用户,是企业里每一位员工,他们本身就有自己的组织架构,可以直接使用企业部门架构或者业务线架构来作为线索,构建用户管理系统。实际业务中的组织架构可能与企业部门架构、业务线架构不同,需要考虑数据共享机制,一般的做法为授权某个人、某个角色组共享某个组织层级的某个对象组数据。
  2. 角色管理
    在设计系统角色时,应该深入理解公司架构、业务架构后,再根据需求设计角色及角色内的等级。一般角色相对于用户来说是固定不变的,每个角色都有自己明确的权限和限制,这些权限在系统设计之处就确定,之后也轻易不会再变动。
    1. 自动获得基础角色
      当员工入职到某部门时,该名员工的账号应该自动被加入该部门对应的基础角色中,并拥有对应的基础权限。这种操作是为了保证系统安全的前提下,减少管理员大量手动操作。使新入职员工能快速使用系统,提高工作效率。
    2. 临时角色与失效时间
      公司业务有时需要外援来支持,他们并不属于公司员工,也只是在某个时段在公司做支持。此时我们需要设置临时角色,来应对这种可能跨多部门协作的临时员工。
      如果公司安全级别较高,此类账号默认有固定失效时间,到达失效时间需再次审核才能重新开启。避免临时账号因为流程不完善,遗忘在系统中,引起安全隐患。
    3. 虚拟角色
      部门角色中的等级,可以授权同等级的员工拥有相同的权限,但某些员工因工作原因,需要调用角色等级之外的权限,相同等级不同员工需要使用的权限还不相同。
      这种超出角色等级又合理的权限授予,可以设置虚拟角色。这一虚拟角色可集成这一工作所需的所有权限,然后将它赋予具体的员工即可。这样即不用调整组织架构和对应的角色,也可以满足工作中特殊情况的权限需求。
    4. 黑白名单
      白名单:某些用户自身不拥有某部门的顶级角色,但处于业务需求,需要给他角色外的高级权限,则可以设计限制范围的白名单,将需要的用户添加进去即可。
      在安全流程中,仅需要对白名单设计安全流程,即可审核在白名单中的特殊用户,做到监控拥有特殊权限的用户,减少安全隐患。
      黑名单:比较常见的黑名单场景是某些犯了错误的员工,虽然在职,但已经不能给他们任何公司权限了。这种既不能取消角色关联,也不能完全停用账号的情况,可以设置黑名单,让此类用户可以登录账号,查看基本信息,但大多数关键权限已经被黑名单限制。
  3. 权限管理
    权限管理一般从三个方面来做限制。页面/菜单权限,操作权限,数据权限。

  1. 页面/菜单权限
    对于没有权限操作的用户,直接隐藏对应的页面入口或菜单选项。这种方法简单快捷直接,对于一些安全不太敏感的权限,使用这种方式非常高效。
  2. 操作权限
    操作权限通常是指对同一组数据,不同的用户是否可以增删改查。对某些用户来说是只读浏览数据,对某些用户来说是可编辑的数据。
  3. 数据权限
    对于安全需求高的权限管理,仅从前端限制隐藏菜单,隐藏编辑按钮是不够的,还需要在数接口上做限制。如果用户试图通过非法手段编辑不属于自己权限下的数据,服务器端会识别、记录并限制访问。
  4. 数据权限如何管控
    数据权限可以分为行权限和列权限。行权限控制:看多少条数据。列权限控制:看一条数据的多少个字段
    简单系统中可以通过组织架构来管控行权限,按照角色来配置列权限,但是遇到复杂情况,组织架构是承载不了复杂行权限管控,角色也更不能承载列的特殊化展示。
    目前行业的做法是提供行列级数据权规则配置,把规则当成类似权限点配置赋予某个角色或者某个用户。

其他注意事项

  1. 超级管理员
    超级管理员是用来启动系统,配置系统的账号。这个账号应该在配置好系统,创建管理员之后被隐藏起来。超级管理员账号拥有系统中全部权限,可穿梭查看各部门数据,如果使用不恰当,是系统管理的安全隐患。
  2. 互斥角色如何处理
    当用户已经有用的角色和即将添加的角色互相互斥时,应该在添加新角色时,提示管理员因角色互斥的原因,无法进行新角色添加。如需添加,要先撤销掉前一个角色,再添加新角色。
  3. 用户管理权限系统设计一定要简单清晰
    在设计权限系统之处,一定要理清思路,一切从简,能不增加的多余角色和权限逻辑,就一定不要增加。因为随着公司业务的扩大,权限和角色也会随之增多,如果初期设计思路不严谨,那么权限系统会随着业务的扩大而无限混乱下去,此时再来整理权限,已经太晚。所以初期设计就一定要条理清晰,简单明了,能避免后续非常多不必要的麻烦。
  4. 无权提示页
    有时员工A会直接给员工B分享他当下正在操作的页面,但有可能员工B无权查看。此时应该在这里考虑添加「无权提示页」,避免粗暴的404页面让员工B以为是系统出错。


问题

实现不够好的RBAC模型存在诸多问题,后期需要超管角色,项目的owner投入很大精力去维护:

  1. 如用户离职,user表需要禁用此用户,无论是逻辑删除还是状态禁用
  2. user_role_mapping表,需逻辑删除离职用户的全部角色的映射关系
  3. 基于角色的访问控制,只验证访问数据的角色,没有对角色内的用户做细分。角色A下面的用户B可以对同样处于该角色下的用户C的数据进行查看,修改,甚至删除。即发生越权访问问题
  4. 角色维护,平台的用户(即公司的员工)一直有新增(入职),转岗(换部门)等动作。新入职的员工应该给什么角色,才能方便TA看到同个部门下同事的数据?员工转岗后,之前有权限操作(查看,编辑,复制,删除等等)的数据,其权限是不是应该收回呢?怎么收回?
  5. 跨部门合作时,部门A(可能对应角色AA)的员工AAA,需要与部门B(对应角色BB)的员工BBB合作,应该怎么给AAA权限,方便TA操作BBB的数据?开放的权限粒度呢?
  6. 公司的组织架构,业务线,一直在调整,那对应的角色权限系统是不是需要持续调整呢?
  7. 公司的组织架构还涉及大的业务线,二级业务部门,三级,需要增加多少个角色权限呢?
  8. 角色超过50个(概数)后,一段时间后,项目的owner(或角色创建者)自己大概率也不知道这个角色的作用;项目的接手人更加是一脸懵逼

参考

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gnwu1111/article/details/134034976

智能推荐

从零开始搭建Hadoop_创建一个hadoop项目-程序员宅基地

文章浏览阅读331次。第一部分:准备工作1 安装虚拟机2 安装centos73 安装JDK以上三步是准备工作,至此已经完成一台已安装JDK的主机第二部分:准备3台虚拟机以下所有工作最好都在root权限下操作1 克隆上面已经有一台虚拟机了,现在对master进行克隆,克隆出另外2台子机;1.1 进行克隆21.2 下一步1.3 下一步1.4 下一步1.5 根据子机需要,命名和安装路径1.6 ..._创建一个hadoop项目

心脏滴血漏洞HeartBleed CVE-2014-0160深入代码层面的分析_heartbleed代码分析-程序员宅基地

文章浏览阅读1.7k次。心脏滴血漏洞HeartBleed CVE-2014-0160 是由heartbeat功能引入的,本文从深入码层面的分析该漏洞产生的原因_heartbleed代码分析

java读取ofd文档内容_ofd电子文档内容分析工具(分析文档、签章和证书)-程序员宅基地

文章浏览阅读1.4k次。前言ofd是国家文档标准,其对标的文档格式是pdf。ofd文档是容器格式文件,ofd其实就是压缩包。将ofd文件后缀改为.zip,解压后可看到文件包含的内容。ofd文件分析工具下载:点我下载。ofd文件解压后,可以看到如下内容: 对于xml文件,可以用文本工具查看。但是对于印章文件(Seal.esl)、签名文件(SignedValue.dat)就无法查看其内容了。本人开发一款ofd内容查看器,..._signedvalue.dat

基于FPGA的数据采集系统(一)_基于fpga的信息采集-程序员宅基地

文章浏览阅读1.8w次,点赞29次,收藏313次。整体系统设计本设计主要是对ADC和DAC的使用,主要实现功能流程为:首先通过串口向FPGA发送控制信号,控制DAC芯片tlv5618进行DA装换,转换的数据存在ROM中,转换开始时读取ROM中数据进行读取转换。其次用按键控制adc128s052进行模数转换100次,模数转换数据存储到FIFO中,再从FIFO中读取数据通过串口输出显示在pc上。其整体系统框图如下:图1:FPGA数据采集系统框图从图中可以看出,该系统主要包括9个模块:串口接收模块、按键消抖模块、按键控制模块、ROM模块、D.._基于fpga的信息采集

微服务 spring cloud zuul com.netflix.zuul.exception.ZuulException GENERAL-程序员宅基地

文章浏览阅读2.5w次。1.背景错误信息:-- [http-nio-9904-exec-5] o.s.c.n.z.filters.post.SendErrorFilter : Error during filteringcom.netflix.zuul.exception.ZuulException: Forwarding error at org.springframework.cloud..._com.netflix.zuul.exception.zuulexception

邻接矩阵-建立图-程序员宅基地

文章浏览阅读358次。1.介绍图的相关概念  图是由顶点的有穷非空集和一个描述顶点之间关系-边(或者弧)的集合组成。通常,图中的数据元素被称为顶点,顶点间的关系用边表示,图通常用字母G表示,图的顶点通常用字母V表示,所以图可以定义为:  G=(V,E)其中,V(G)是图中顶点的有穷非空集合,E(G)是V(G)中顶点的边的有穷集合1.1 无向图:图中任意两个顶点构成的边是没有方向的1.2 有向图:图中..._给定一个邻接矩阵未必能够造出一个图

随便推点

MDT2012部署系列之11 WDS安装与配置-程序员宅基地

文章浏览阅读321次。(十二)、WDS服务器安装通过前面的测试我们会发现,每次安装的时候需要加域光盘映像,这是一个比较麻烦的事情,试想一个上万个的公司,你天天带着一个光盘与光驱去给别人装系统,这将是一个多么痛苦的事情啊,有什么方法可以解决这个问题了?答案是肯定的,下面我们就来简单说一下。WDS服务器,它是Windows自带的一个免费的基于系统本身角色的一个功能,它主要提供一种简单、安全的通过网络快速、远程将Window..._doc server2012上通过wds+mdt无人值守部署win11系统.doc

python--xlrd/xlwt/xlutils_xlutils模块可以读xlsx吗-程序员宅基地

文章浏览阅读219次。python–xlrd/xlwt/xlutilsxlrd只能读取,不能改,支持 xlsx和xls 格式xlwt只能改,不能读xlwt只能保存为.xls格式xlutils能将xlrd.Book转为xlwt.Workbook,从而得以在现有xls的基础上修改数据,并创建一个新的xls,实现修改xlrd打开文件import xlrdexcel=xlrd.open_workbook('E:/test.xlsx') 返回值为xlrd.book.Book对象,不能修改获取sheett_xlutils模块可以读xlsx吗

关于新版本selenium定位元素报错:‘WebDriver‘ object has no attribute ‘find_element_by_id‘等问题_unresolved attribute reference 'find_element_by_id-程序员宅基地

文章浏览阅读8.2w次,点赞267次,收藏656次。运行Selenium出现'WebDriver' object has no attribute 'find_element_by_id'或AttributeError: 'WebDriver' object has no attribute 'find_element_by_xpath'等定位元素代码错误,是因为selenium更新到了新的版本,以前的一些语法经过改动。..............._unresolved attribute reference 'find_element_by_id' for class 'webdriver

DOM对象转换成jQuery对象转换与子页面获取父页面DOM对象-程序员宅基地

文章浏览阅读198次。一:模态窗口//父页面JSwindow.showModalDialog(ifrmehref, window, 'dialogWidth:550px;dialogHeight:150px;help:no;resizable:no;status:no');//子页面获取父页面DOM对象//window.showModalDialog的DOM对象var v=parentWin..._jquery获取父window下的dom对象

什么是算法?-程序员宅基地

文章浏览阅读1.7w次,点赞15次,收藏129次。算法(algorithm)是解决一系列问题的清晰指令,也就是,能对一定规范的输入,在有限的时间内获得所要求的输出。 简单来说,算法就是解决一个问题的具体方法和步骤。算法是程序的灵 魂。二、算法的特征1.可行性 算法中执行的任何计算步骤都可以分解为基本可执行的操作步,即每个计算步都可以在有限时间里完成(也称之为有效性) 算法的每一步都要有确切的意义,不能有二义性。例如“增加x的值”,并没有说增加多少,计算机就无法执行明确的运算。 _算法

【网络安全】网络安全的标准和规范_网络安全标准规范-程序员宅基地

文章浏览阅读1.5k次,点赞18次,收藏26次。网络安全的标准和规范是网络安全领域的重要组成部分。它们为网络安全提供了技术依据,规定了网络安全的技术要求和操作方式,帮助我们构建安全的网络环境。下面,我们将详细介绍一些主要的网络安全标准和规范,以及它们在实际操作中的应用。_网络安全标准规范