这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战
前文介绍了早期的自主访问控制模型(DAC)和强制访问控制模型(MAC),这次介绍一下更为常见的基于角色访问控制模型(RBAC)和基于属性访问控制模型(ABAC)。
基于角色访问控制模型
基于角色访问控制模型(Role-Based Access Control),顾名思义,就是主体与客体之间多了一个“角色”,角色是权限的一个集合。主体与客体不再直接通过权限而是通过角色建立联系,这样解耦了主体与权限的关系,极大地简化了权限的管理。
说一下简单的数据库的设计:
- 首先我们需要有一张用户表:用户id | 用户名字 | 角色id
- 一张角色表:角色id | 角色名称
- 角色-权限映射表:关系id | 角色id | 权限id
RBAC虽然简化了权限的管理,但是对于复杂场景的角色管理,它依然不够灵活。比如主体和客体之间的权限复杂多变,可能就需要维护大量的角色及其授权关系;新增客体也需要对所有相关角色进行处理。基于属性的角色访问控制就是为了解决这个问题。
基于属性访问控制
基于属性访问控制(Attributes-based Access Control)是一种非常灵活的访问控制模型。属性包括请求主体的属性、请求客体的属性、请求上下文的属性、操作的属性等。如身为班主任(主体的属性)的老张在上课(上下文的属性)时可以踢(操作属性)身为普通学生(客体的属性)的小明一脚。可以看到,只要对属性进行精确定义及划分,ABAC可以实现非常复杂的权限控制。
ABAC的另一大优势是主体与客体不再有耦合,可以提供一种更为动态的访问控制能力,降低了维护成本。
ABAC需要维护一个策略表,以及一个策略解析引擎。权限校验规则(策略表)及属性作为输入送入策略解析,得到授权结果。
ABAC的流程:
- 认证,确认主体的信息
- 属性的收集
- 获取决策规则
- 规则执行,判断访问权限