前言
本文所有内容基于 10.9.3-MariaDB 版本
用户、角色、权限的关系
每个用户可以绑定多个角色,但是在会话中只能同时能对应一个角色,且拥有改角色的权限,但是一个角色可以通过继承(我自己理解成继承)多个其他角色的权限
具体在实践中的使用方案可参照下图
命令详解
创建用户
#创建创建996448的用户,此用户可以通过任意ip登录,密码为qazwsx123
create user '996448'@'%' identified by 'qazwsx123';
# 创建创建bigdata_u的用户,此用户可以通过当前ip登录,密码为qazwsx
create user 'bigdata_u'@'localhost' identified by 'qazwsx';
修改用户密码(管理员权限的账户可以修改普通用户的密码,普通用户可以修改自己的密码)
# 将996448用户密码修改为qaz123
set password for '996448'@'%'=password('qaz123');
创建角色
#创建角色 extract_jkdl_r
create role 'extract_jkdl_r'
删除角色
# 删除角色
drop role app_jkdl;
查看所有角色和用户
#查看角色或用户
select * from mysql.`user` u where is_role = 'Y'
给角色或用户赋权
权限分类有:select,insert,update,DELETE, CREATE, DROP, REFERENCES, INDEX, ALTER, CREATE VIEW, SHOW VIEW, TRIGGER, DELETE HISTORY
执行了权限更改后都需要执行权限刷新的操作进行激活
# 权限刷新
flush privileges;
# 将test库的所有权限赋给 app_jkdl_r角色
grant all privileges on test.* to 'app_jkdl_r';
# 将test库的hr_t表的select,insert权限分配给hr角色
grant select,insert on test.hr_t to 'hr';
# 将所有表的所有权限赋给 bigdata_u 用户
grant all privileges on *.* to 'bigdata_u'@'%';
撤销权限
# 撤销 fdj角色,对test库的所有权限
REVOKE all privileges ON test.* FROM 'fdj';
# 查看角色权限
show grants for '996448'
角色间的权限
#把一个的权限赋值给第二个角色
grant 'app_jkdl_r' to '996448_r';
所有角色能使用的前提的角色进行了激活
#查看
show variables like 'activate_all_roles_on_login';
#对所有角色永久激活。运行这条语句之后,用户才真正拥有了赋予角色的所有
set global activate_all_roles_on_login = ON;
查询当前用户使用的角色,设置当前用户的角色
#授予权限后需要激活才生效 前提是用户已经和角色绑定,且一个用户同时只能有一个角色的权限
# 设置当前用户对应的角色
SET ROLE staff;
# 查询当前用户当前所使用的角色
SELECT CURRENT_ROLE;
# 设置用户的默认角色
set default 'role_name'[@ 'host_name'] all to 'user_name'[@ 'host_name'];