MySQL8.0的用户角色权限

MySQL8新增了角色(role)的概念,使账号权限的管理,更加灵活方便。所谓角色,就是一些权限的集合。然后再把该集合授权给某个账户(往往是某一批账户,因为账号会绑定IP,不同的IP,虽然账号名相同被视为不同账号),这样当我们需要对这些账号减少或增加权限时,只需要修改权限集合(role)即可,不用单个账号多次修改。这确实使DBA的运维轻松了不少。

创建角色

  1. create role 'app_dev';

给角色添加权限

  1. # 权限:查询,新增,更新,删除,外键权限,修改表结构,创建临时表
  2. grant select,insert,update,delete,references,alter,create temporary tables
  3. on db1.* to app_dev;

查看角色权限

  1. show grants for 'app_dev';

撤销角色的权限

  1. --撤销'dev'@'localhost'用户对数据库db1的表修改(alter)权限
  2. revoke alter on db1.* from 'dev'@'localhost';
  3. --撤销'dev'@'localhost'用户对数据库db1的所有权限
  4. revoke all on db1.* from 'dev'@'localhost';
  5. --撤销app_dev角色对数据库db1的所有权限
  6. revoke all on db1.* from app_dev;

创建用户

  1. create user 'dev'@'localhost' identified with mysql_native_password by 'test';

查看用户

  1. select user,host from mysql.user;

给用户直接赋权限

  1. grant all privileges on *.* to 'dev'@'localhost';

给用户赋角色

  1. 将角色app_dev赋给用户dev

    1. --将角色app_dev赋给用户dev
    2. grant app_dev to dev;
  2. 激活用户的角色

    1. --激活用户的角色
    2. set default role all to dev;
  3. 如果不想手动激活用户角色,则进行如下设置

    1. --如果不想手动激活用户角色,则进行如下设置
    2. show global variables like 'activate_all_roles_on_login';
    3. set global activate_all_roles_on_login=ON;

查看用户权限

  1. show grants for dev;
  2. --如果用户下挂角色则需要加using 角色名,才能看到对应角色下得权限信息
  3. show grants for dev using app_dev;

刷新权限

在操作修改完权限后,执行如下命令,刷新数据库权限配置。

  1. FLUSH PRIVILEGES;

常见权限

权限 权限级别 权限说明
CREATE 数据库、表或索引 创建数据库、表或索引权限
DROP 数据库或表 删除数据库或表权限
GRANT OPTION 数据库、表或保存的程序 赋予权限选项
REFERENCES 数据库或表
ALTER 更改表,比如添加字段、索引等
DELETE 删除数据权限
INDEX 索引权限
INSERT 插入权限
SELECT 查询权限
UPDATE 更新权限
CREATE VIEW 视图 创建视图权限
SHOW VIEW 视图 查看视图权限
ALTER ROUTINE 存储过程 更改存储过程权限
CREATE ROUTINE 存储过程 创建存储过程权限
EXECUTE 存储过程 执行存储过程权限
FILE 服务器主机上的文件访问 文件访问权限
CREATE TEMPORARY TABLES 服务器管理 创建临时表权限
LOCK TABLES 服务器管理 锁表权限
CREATE USER 服务器管理 创建用户权限
PROCESS 服务器管理 查看进程权限
RELOAD 服务器管理 执行flush-hosts, flush-logs, flush-privileges, flush-status, flush-tables, flush-threads, refresh, reload等命令的权限
REPLICATION CLIENT 服务器管理 复制权限
REPLICATION SLAVE 服务器管理 复制权限
SHOW DATABASES 服务器管理 查看数据库权限
SHUTDOWN 服务器管理 关闭数据库权限
SUPER 服务器管理 执行kill线程权限