1、作用

约束用户能够对数据库对象(库、表)干啥(SQL语句)

2、权限列表

  1. show privileges;
  2. 常规权限介绍:
  3. all:
  4. SELECT,INSERT, UPDATE, DELETE, CREATE, DROP, RELOAD, SHUTDOWN, PROCESS, FILE, REFERENCES, INDEX, ALTER,
  5. SHOW DATABASES, SUPER, CREATE TEMPORARY TABLES, LOCK TABLES, EXECUTE, REPLICATION SLAVE,
  6. REPLICATION CLIENT, CREATE VIEW, SHOW VIEW, CREATE ROUTINE, ALTER ROUTINE, CREATE USER,
  7. EVENT, TRIGGER, CREATE TABLESPACE
  8. all: 以上所有权限,一般是普通管理员拥有的
  9. with grant option: 超级管理员才具备的,给别的用户授权的功能
  10. Usage: 没有权限,只能连接登录,刚创建的用户为此权限

3、授权

grant 权限 on  权限范围  to  '用户'@'白名单';

#权限范围
*.*: 所有库下的所有表
相当于: chmod -R 777 /

db01.*: 单库
相当于: chmod -R 777 /db01

db01.tb01: 单表
相当于: chmod 777 /da01/tb01

4、授权演示

查询用户权限

create user 'laidenglin'@'192.168.10.240' identified by '123456';
flush privileges;
show grants for 'laidenglin'@'192.168.10.240';

use mysql
user表       :  user  host auth plugin  全局授权(*.*)的权限   
db表         :  user  host              单库范围授权(wordpress.* )的用户权限
table_priv表 :  user  host              单表范围授权(wordpress.t1)的用户权限

给用户授权

#授权超级管理员admin,只能本机登录,所有库.所有表,all权限,并且拥有grant权限
create user 'admin'@'127.0.0.1' identified by '123456';
grant all on *.* to 'admin'@'127.0.0.1' with grant option;
flush privileges;
show grants for 'admin'@'127.0.0.1';

#授权普通用户,具有db01库下的所有表 具有 增删查改权限
create user 'javadev'@'192.168.10.13' identified by '123456';
grant select,insert,update,delete on db01.* to 'javadev'@'192.168.10.13';
flush privileges;
show grants for 'javadev'@'192.168.10.13';

#grant无法一次给多个库进行授权,授权多个库时,需要写多条grant语句

回收用户权限

# Linux: 反复授权,修改权限
# MySQL: 反复授权,叠加权限

#回收普通用户的delete权限
revoke  delete on db01.* from 'javadev'@'192.168.10.13';
flush privileges;
show grants for 'javadev'@'192.168.10.13';

MySQL 8.0 权限新特性: role (角色)

官方文档
https://dev.mysql.com/doc/refman/8.0/en/roles.html

developer: 开发角色, 对db01库所有表有增删查改权限
read: 只读角色, 对db01库所有表只读权限

#创建角色
create role 'developer','read';

#角色授权
grant insert,delete,select,update on db01.* to 'developer';
grant select on db01.* to 'read';

#创建用户 
create user 'javadev'@'192.168.10.13' identified by '123456';
create user 'select'@'192.168.10.13' identified by '123456';

#授权用户角色
grant 'developer' to 'javadev'@'192.168.10.13';
grant 'read' to 'select'@'192.168.10.13';