`

RBAC和ACL的比较

阅读更多

    RBAC:Role Based Access Control,翻译过来基本上就是基于角色的访问控制系统。
    ACL:Access Control List,访问控制列表,是前几年盛行的一种权限设计,它的核心在于用户直接和权限挂钩。RBAC的核心是用户只和角色关联,而角色代表对了权限,这样设计的优势在于使得对用户而言,只需角色即可以,而某角色可以拥有各种各样的权限并可继承。ACL和RBAC相比缺点在于由于用户和权限直接挂钩,导致在授予时的复杂性,虽然可以利用组来简化这个复杂性,但仍然会导致系统不好理解,而且在取出判断用户是否有该权限时比较的困难,一定程度上影响了效率。
我想理一理思路,看看ACL与RBAC的区别:

还是以部门新闻来讨论,对于静态授权,在系统设计做需求分析的时候,往往就可以确定一个系统角色的种类,像新闻系统中,根据需求,可能会有新闻发布者(Publisher),新闻审核者(Reviewer),新闻浏览者(Visitor),管理员(Manager)以及超级管理员(Administrator)。

在设计的时候我们也已经把这些角色与相应的一些Operation绑定在一起。
如:Publisher拥有Publish_Operation Modify_Operation
Reviewer拥有Review_Operation Modify_Operation Delete_Operation
Visitor拥有Visit_Operation,
Manager拥有Create_News_System_Instance_Operation
Modify_News_System_Instance_Operation
Delete_News_System_Instance_Operation
Administrator负责Create_User_Operation
Delete_User_Operation
Assign_Permission_Operation
Deassign_Permission_Operation
Assign_Role_Operation
Deassign_Role_Operation

在授权时,往往先为一个用户(USER),赋予一个角色,如:Manager.这样,USER就拥有了对所有News_Instance(也就是部门新闻)操作的权限。现在假设用户(UserA)访问Create_News_System_Instance功能来创建一个新的新闻实例,叫做采购部门新闻.因为我们在设计的时候就确定,该功能只能由Manager来访问,于是,系统中权限的判断部分会首先判断当前用户(UserA)是否Manager角色,是的话就允许访问,否则显示没有授权的错误信息。

所以,对于Manager这样的应用:
[1]在设计的时候,我们就将这样的角色与相应的Permissions(AlistofSubject-Operationpairs)关联在一起了,这里的Subject是所有的新闻实例(News_Instance),Operation就是Create,Modify以及Delete.
[2]在授权的时候,超级管理员(Administrator)可以利用Assign_Role_Operation将用户(User)与Manager这个角色关联起来。这样,User就拥有了对所有新闻实例的Create,Modify以及Delete操作的权限。
[3]在权限判断的时候,RBAC系统首先判断当前用户是否是设计时确定的角色(这里是Manager),如果是,就允许用户访问,否则就拒绝访问,并显示错误信息。


对于Publisher这样的角色有些不同,Publisher这个角色只与Operation绑定在一起,并没有与具体的Subject相关联,因此,在授权的时候,还需要指定相应的Subject.

所以,对Publisher这样只能事先确定Operation的应用来说:
[1]在设计的时候,我们只能确定该角色能进行哪些操作,而不能确定这些操作实施的对象。
[2]在授权的时候:
[2.1]首先将Publisher与Subject关联,如将Publisher与采购部门新闻关联产生:采购部门新闻_News_Publisher的角色
[2.2]Administrator为用户(User)授于采购部门新闻_News_Publisher角色。从而User拥有了对"采购部门新闻"的发布权限
[3]在权限判断的时候,用户访问采购部门新闻_News_Publish_Operation,系统首先判断该用户是否采购部门新闻_News_Publisher?如果是,就允许用户访问,否则就拒绝访问,并显示错误信息。
这里用到的方法可能是这个样子:
booleancheckPermission(采购部门新闻,Publish_Operation,User){
Listpublishers=RBAC.findRole(newPermission(采购部门新闻,Publish_Operation));
if(publishers==null)returnfalse;
for(Iteratorit=publishers.iterator;it.hasNext();){
Rolepublisher=(Publisher)it.next();
if(publisher.isAssignedWithUser(User)){
returnture;
}
}
returnfalse;
}

假如说,不采用RBAC的做法,考虑一下,使用ACL,那又会是什么样子呢?
对于Manager那样能在设计时就确定Subject与Operation的角色,我认为没有必要考虑ACL了.对于Publisher这样,只能事先确定Operation的角色,我们来做个对比.权限系统要灵活,但是也要简洁,要不然就很可能导至失控。因为嵌套的层次太多,有可能发生不可预知的情况.有一天管理员可能会莫明的发现,怎么这个人会有这个权限的?
所以,我认为在RBAC里不支持Role的层级关系为妙。

好了,现在来看看ACL对Publisher应用
这里指的ACL是直接将User或Group与Subject关联的做法。
User与Subject是多对多的情况,
Group与Subject也是多对多的情况,
同样的,User与Group也是多对多的情况。

现在,还是以采购部门新闻为例:
[1]在授权的时候,可以有以下操作:
[1.1]将User与Subject关联在一起,但是要指定相应的Operation.
如:assignPermission(采购部门新闻,Publish_Operation,User)
[1.2]将Group与Subject关联在一起:
如:assignPermission(采购部门新闻,Publish_Operation,Group)
[1.3]将User与Group关联
如:
assignUserGroup(User,Group)

[2]在权限判断的时候,用户访问采购部门新闻_News_Publish_Operation,系统做如下检查:
booleancheckPermission(采购部门新闻,Publish_Operation,User){
booleanhasPermission=false;
//usersinclude:
//1.PermissiondirectassignedUsers
//2.Theuserassignedwiththegroupsthatassignedwithpermission
Listusers=getAssignedUsers(newPermission(采购部门新闻,Publish_Operation));
hasPermission=users.contains(User)?true:false;
}

分享到:
评论

相关推荐

    loginServer CAS / josso / LDAP / RBAC / ACL

    标题中的"loginServer CAS / josso / LDAP / RBAC / ACL"涉及到了多个IT领域的关键概念,这些都是构建安全、高效的企业级身份验证和授权系统的重要组成部分。以下是对这些概念的详细解释: 1. **CAS(Central ...

    支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架

    支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架。支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架。支持 ACL、RBAC、ABAC 多种模型的 PHP 权限管理框架。...支持 ACL、RBAC、ABAC 多种模型的 P

    YiiCasbin支持ACLRBAC多种模型的权限管理框架

    - **灵活性**:Casbin 的模型定义语言(如 ACL 和 RBAC)允许开发者根据业务需求定制权限策略,同时支持动态更新策略,使得权限管理更加灵活。 - **可扩展性**:Casbin 的设计允许添加自定义的模型和匹配器,因此...

    go.sec:golang 安全框架包括 rbac acl 等

    "go.sec" 提供了包括RBAC(Role-Based Access Control,基于角色的访问控制)和ACL(Access Control List,访问控制列表)在内的多种安全机制,帮助开发者实现更高级别的权限管理和数据保护。下面将详细介绍这些知识...

    基于Python实现的全面支持ACL、RBAC、ABAC的权限管理框架设计源码

    该项目为基于Python开发的综合权限管理框架,全面支持ACL、RBAC、ABAC三种权限模型。框架源码共计139个文件,其中包含62个Python代码文件、33个配置文件、31个CSV数据文件、2个YAML配置文件、2个Markdown文档、2个...

    RBAC PHP+MYSQL

    **RBAC PHP+MYSQL**是基于PHP编程语言和MySQL数据库构建的角色(Role-Based)访问控制(Access Control)系统。在本文中,我们将深入探讨RBAC的概念、其在PHP中的实现以及与MySQL数据库的结合。 **一、RBAC概念** ...

    一个授权库,支持访问控制模型,如Golang中的ACL RBAC ABAC.zip

    ACL适用于简单的权限管理,RBAC适合需要管理多用户角色的场景,而ABAC则为高度动态和复杂的访问需求提供了强大的解决方案。这个授权库为Golang开发者提供了实现这些模型的工具,从而能够在设计和实现安全系统时更加...

    rbac:用于Laravel 8缓存和权限组的简单RBACACL

    Laravel RBAC 适用于Laravel 8及更高版本的简单RBAC / ACL,具有缓存权限和权限组,以​​提供更好的便利性。的角色权限权限组安装使用以下命令通过composer安装此软件包: composer require yaroslavmolchan/rbac...

    基于RBAC的权限设计模型

    在实际应用中,RBAC模型还可能与其他安全机制结合,例如多因素认证(MFA)、访问控制列表(ACL)等,以提高系统的安全性。此外,RBAC还可以与业务流程和工作流系统集成,实现更复杂的权限控制逻辑。 文档"基于RBAC...

    ThinkPHP(RBAC)权限管理系统_第24讲_角色管理之配置权限

    实现权限控制通常有两种方式:基于资源的权限控制(如访问控制列表,ACL)和基于角色的权限控制(RBAC)。在本课中,我们专注于RBAC,它通过角色的上下文判断用户是否有执行某个操作的权限,减少了检查单个用户权限...

    用java写的RBAC角色访问控制系统可用于毕业设计

    总的来说,"my-rbac"项目提供了一个用Java实现的RBAC角色访问控制系统,适合毕业设计或其他项目实践,帮助开发者掌握RBAC模型的实现细节和最佳实践。通过深入学习和实践,可以提升对权限管理的理解和应用能力。

    角色访问RBAC

    在实际应用中,RBAC模型可以与其他安全策略结合,如多因素认证、访问控制列表(ACL)等,以实现更高级别的安全防护。通过深入理解和应用RBAC,企业能够构建出既便捷又安全的信息管理系统,有效保护其数据资源免受...

    cakephp中acl详解.rar

    CakePHP的ACL支持更复杂的权限规则,如基于角色的访问控制(RBAC)和基于属性的访问控制(ABAC)。你可以创建自定义的Aro和Aco类来扩展默认功能。 **10. 性能考虑** 虽然ACL提供了强大的权限控制,但频繁的数据库...

    Yii2ExtJs5RBAC.zip

    Yii2 ExtJs5 RBAC 支持 ACL RBAC。安装安装这个扩展的首选方式是通过composer。执行composer require --prefer-dist myweishanli/yii2-extjs-rbac或添加"myweishanli/yii2-extjs-rbac": "~1.0.0"配置@app/config...

    spring security acl

    - ACL可以与基于角色的访问控制(RBAC)结合使用,为用户提供更加复杂的权限模型。 **6. 实现与注意事项** - 配置Spring Security ACL时,需要指定ACL数据源,如JDBC ACL Service,这通常涉及到额外的表设计和...

    laravel-rbac

    Laravel RBAC 适用于Laravel 5的超简单RBAC / ACL实现安装使用以下命令将此文件与作曲家( )一起使用 composer require phpzen/laravel-rbac或修改您的composer.json "require": { ... "phpzen/laravel-rbac": "^...

    关于介绍rbac背景的ppt课件

    6. **ACL与CL的比较** ACL更适合查看主体对哪些客体有权限,而CL则利于查看主体的权限集合。ACL在权限传递上较困难,但回收权限较容易;CL则在权限传递上简便,但回收权限较难。现代操作系统通常使用ACL或其变种,...

    Api-middleware-acl.zip

    Api-middleware-acl.zip,中间件acl访问控制库rbac casbinmiddleware acl,一个api可以被认为是多个软件设备之间通信的指导手册。例如,api可用于web应用程序之间的数据库通信。通过提取实现并将数据放弃到对象中,api...

    ACL0230-ppt简体版

    2. **安全性模型**:讲解.NET Framework的安全模型,包括代码访问安全(Code Access Security, CAS)和基于角色的安全性(Role-Based Security, RBAC)。 3. **System.Security命名空间**:介绍System.Security命名...

    jcasbin:一个授权库,支持Java中的访问控制模型,如ACL,RBAC,ABAC

    卡斯宾 新闻:仍然担心如何编写正确的jCasbin策略? Casbin online editor... 没有资源的ACL :通过使用诸如write-article , read-log类的权限,某些方案可能针对一种资源而不是单个资源。 它不控制对特定文章或日

Global site tag (gtag.js) - Google Analytics