基于角色的访问控制”和 基于资源的访问控制

基于角色的访问控制(RBAC)是实施面向企业安全策略的一种有效的访问控制方式。

RBAC(Role-Based Access Control)

基本思想

建立一个角色集合

其基本思想是,对系统操作的各种权限不是直接授予具体的用户,而是在用户集合与权限集合之间建立一个角色集合。每一种角色对应一组相应的权限。一旦用户被分配了适当的角色后,该用户就拥有此角色的所有操作权限。这样做的好处是,不必在每次创建用户时都进行分配权限的操作,只要分配用户相应的角色即可,而且角色的权限变更比用户的权限变更要少得多,这样将简化用户的权限管理,减少系统的开销。

角色
角色代表了操作集合,可以理解为权限的集合,一般情况下我们会赋予用户角色而不是权限,即这样用户可以拥有一组权限,赋予权限时比较方便。典型的如:项目经理、技术总监、CTO、开发工程师等都是角色,不同的角色拥有一组不同的权限。

隐式角色
即直接通过角色来验证用户有没有操作权限,如在应用中 CTO、技术总监、开发工程师可以使用打印机,假设某天不允许开发工程师使用打印机,此时需要从应用中删除相应代码;再如在应用中 CTO、技术总监可以查看用户、查看权限;突然有一天不允许技术总监查看用户、查看权限了,需要在相关代码中把技术总监角色从判断逻辑中删除掉;即粒度是以角色为单位进行访问控制的,粒度较粗;如果进行修改可能造成多处代码修改。

显示角色
在程序中通过权限控制谁能访问某个资源,角色聚合一组权限集合;这样假设哪个角色不能访问某个资源,只需要从角色代表的权限集合中移除即可;无须修改多处代码;即粒度是以资源/实例为单位的;粒度较细。

 

 拿某个用户来说,假设他是采购员。我们已经查出来他对应账号映射的角色是采购员的角色。他可以进行下单操作

 隐式地基于角色的权限控制:用户可能有多个角色
Llist<User> user=Ream.getUser("zhangsan");
for(User u:user){
     if("purchase".equalse(user.getRole())){
       //开放前端下单功能展示
     }

}

 

上面这种访问方式局限性太小了,而且当需要扩展的时候,需要修改源码添加对应角色,如某一天,采购经理也可以下单了。

需要在源码添加采购经理角色,前台下单功能才能展示出来,如果后续100个呢?维护量太大了。

 隐式地基于角色的权限控制:用户可能有多个角色
Llist<User> user=Ream.getUser("zhangsan");
for(User u:user){
     if("purchase".equalse(u.getRole())||"purchaseManager".equals(u.getRole()){
       //开放前端下单功能展示
     }

}

 

上述方式太过于维护太麻烦了。老是要修改源码,理想状态下。我们只需要在前端操作一下就完成了权限的分配了。所以用下面的方式去访问。

基于资源的访问控制(显示角色)基于资源的访问控制

[users]
zhang=123,role1,role2
wang=123,role1
[roles]
role1=user:create,user:update
role2=user:create,user:delete&nbsp;

规则:“用户名=密码,角色 1,角色 2”“角色=权限 1,权限 2”,即首先根据用户名找到角色,然后根据角色再找到权限;即角色是权限集合;

如wang 拥有role1的角色权限集合即:wang能够create和update

但是现实中,某个用户不能看某些功能,可以看某些功能,但是没拥有某功能的所有操作(如,我可以查看该功能的报表的信息,但是。我不能增删改)我的想法是下面这个

如:系统角色(admin)绑定功能(树形功能模块对应不同子功能的勾选),用户绑定角色,决定用户使用那些模块功能,
同时映射对应具体功能的权限(如增删查改的操作)

 

 

 

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 基于角色访问控制的优点是可以更好地控制用户的权限,因为用户的角色可以根据其职责和权限进行定义和分配。这种方法也更加灵活,因为可以根据需要随时更改用户的角色和权限。 缺点是可能会出现角色的重叠或者角色的定义不清晰,导致权限的混乱和不一致。此外,如果需要对每个用户进行单独的权限设置,这种方法可能会变得非常繁琐和复杂。 基于属性的访问控制的优点是可以更加精细地控制用户的权限,因为可以根据用户的属性来进行访问控制。这种方法也比较简单,因为只需要对每个属性进行定义和分配即可。 缺点是可能会出现属性的重叠或者属性的定义不清晰,导致权限的混乱和不一致。此外,如果需要对每个用户进行单独的属性设置,这种方法也可能会变得非常繁琐和复杂。 ### 回答2: 基于角色访问控制(Role-Based Access Control,RBAC)是一种常见的访问控制模型,它基于定义角色和将角色分配给用户的概念。以下是基于角色访问控制的优点和缺点。 优点: 1. 灵活性:RBAC可以根据需要轻松地分配和撤销角色,从而实现权限的动态管理。这样,当组织结构或员工职位发生变化时,可以更有效地调整访问权限。 2. 简化管理:通过角色的使用,管理员可以集中管理权限。他们只需为每个角色分配适当的权限,而不必为每个用户单独指定权限,从而大大减少了管理负担。 3. 增强安全性:RBAC提供了一种机制,可以确保用户只能访问其所需的资源。任何未分配给用户角色资源将对其不可见,从而减少了潜在的安全风险。 缺点: 1. 复杂性:RBAC的实施可能需要对组织的角色、权限和用户进行详细的分析和设计。这可能需要花费大量时间和资源,特别是对于大型组织或具有复杂权限需求的环境。 2. 风险扩散:如果角色的权限分配不当,或者角色没有适当地限制权限的范围,可能会导致潜在的安全风险。一旦一个角色受到入侵,攻击者可能获得该角色的所有权限,从而扩大了风险范围。 3. 难以排除错误:当有数百个角色和权限时,排除错误变得更加困难。在复杂的RBAC环境中,发生错误的潜在机会增加,这可能导致访问问题或安全漏洞。 综上所述,基于角色访问控制具有灵活性和简化管理的优点,但实施过程可能较为复杂,存在风险扩散和难以排除错误的缺点。因此,在选择和实施访问控制模型时,需要根据实际需求和环境综合考虑各种因素。 ### 回答3: 基于角色访问控制是一种常见的访问控制模型,根据用户的角色分配权限。这种模型有以下优点: 1. 简化权限管理:基于角色访问控制可以将用户划分为不同的角色,给予每个角色不同的权限。当用户角色发生变化时,只需更新其所属角色即可,而不需要逐个编辑用户的权限设置,简化了权限管理过程。 2. 灵活性:基于角色访问控制模型允许在不同的角色中定义不同的权限,以适应各种复杂的业务需求。而且可以根据组织的结构和职能来定义角色之间的关系,从而更灵活地管理和控制用户的访问权限。 然而,基于角色访问控制也存在一些缺点: 1. 权限泄漏风险:如果角色权限的定义不够细粒度,或者某个用户被授予了与其角色不匹配的权限,就可能出现权限泄漏的风险。这种情况下,用户可能会获得不应该拥有的权限,从而导致数据泄露或系统被攻击。 2. 难以适应个性化需求:基于角色访问控制模型往往是一种粗粒度的权限管理方式,无法满足个性化和细粒度的权限需求。如果某个用户需要特殊权限或者不符合现有角色的权限设置,就需要额外的管理工作或者重新设计角色。 而基于属性的访问控制是另一种访问控制模型,权限控制是基于资源的属性进行的。它具有以下优点: 1. 灵活性:基于属性的访问控制更加细粒度,根据资源的不同属性,可以对不同用户进行特定的访问控制。这种模型可以更好地满足个性化和细粒度权限需求,提供更灵活的权限管理能力。 2. 精确控制:基于属性的访问控制模型可以将权限控制限制在特定资源的特定属性上,可以实现更精确的权限控制。对于安全性要求高的系统和敏感数据,这种模型可以提供更严格的访问控制。 但基于属性的访问控制也存在以下缺点: 1. 复杂性:基于属性的访问控制模型需要更多的配置和管理工作,包括对属性和权限的定义、更新和维护等。这增加了系统的复杂性和管理的难度。 2. 安全风险:如果对属性的定义不准确或者数据被篡改,就可能导致权限被错误地授予或者被绕过,从而带来安全风险。因此,需要对属性的定义和数据的完整性进行严格的控制

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值