RBAC
RBAC基于角色的访问控制,RBAC认为权限授权的过程可以抽象地概括为:Who是否可以对What进行How的访问操作
RBAC简介
基于角色的权限访问控制模型
在RBAC模型里面,有3个基础组成部分,分别是:用户、角色和权限。RBAC通过定义角色的权限,并对用户授予某个角色从而来控制用户的权限,实现了用户和权限的逻辑分离(区别于ACL模型),极大地方便了权限的管理:
- User(用户):每个用户都有唯一的UID识别,并被授予不同的角色
- Role(角色):不同角色具有不同的权限
- Permission(权限):访问权限
- 用户-角色映射:用户和角色之间的映射关系
- 角色-权限映射:角色和权限之间的映射
RBAC支持三个著名的安全原则:最小权限原则、责任分离原则和数据抽象原则
- 最小权限原则:RBAC可以将角色配置成其完成任务所需的最小权限集合
- 责任分离原则:可以通过调用相互独立互斥的角色来共同完成敏感的任务,例如要求一个计账员和财务管理员共同参与统一过账操作
- 数据抽象原则:可以通过权限的抽象来体现,例如财务操作用借款、存款等抽象权限,而不是使用典型的读、写、执行权限
优点:
- 简化了用户和权限的关系
- 易扩展、易维护
缺点:
- RBAC模型没有提供操作顺序的控制机制,这一缺陷使得RBAC模型很难适应哪些对操作次序有严格要求的系统
RBAC的3种模型
- RBAC0,是最简单、最原始的实现方式,也是其他RBAC模型的基础
- RBAC1基于RBAC0模型,引入了角色间的继承关系,即角色上有了上下级的区别。
- RBAC2基于RBAC0模型的基础上,进行了角色的访问控制。
RBAC数据表设计
数据库 create database test default character set utf8mb4;
表和表之间的关系:1对1、1对多或者多对1、多对多
1对1实现方式
具体的实现方式有2种:共享主键和唯一外键。例如员工信息和登录账号
共享主键
create table if not exists tb_emps(
id bigint primary key auto_increment comment '雇员编号',
name varchar(32) not null comment '姓名',
sex boolean default 1 comment '性别',
education varchar(32),
birth date comment '出生日期',
hire_date date comment '入职日期',
salary numeric(8,2) comment '月薪'
)engine=innodb default charset utf8 comment '雇员信息';
create table if not exists tb_users(
id bigint primary key comment '用户编号',
foreign key(id) references tb_emps(id) on delete cascade