# test账号
'test'@'localhost'

全局性管理权限

## *.*  代表所有数据库的权限
grant all on *.* to 'test'@'localhost';

grant select,insert on *.* to 'test'@'localhost';

数据库级别的权限

grant all on test.* to 'test'@'localhost';
grant select,insert on test.* to 'test'@'localhost';

数据库对象级别权限

grant select, insert on test.test to 'test'@'localhost';
grant select(order_date), insert(order_id,customer_name) on test.test to 'test'@'localhost';

查看权限

# 查看所有用户
SELECT DISTINCT CONCAT('User: ''',user,'''@''',host,''';') AS query FROM mysql.user;

# 查看用户权限
show grants for 'test'@'localhost';

系统权限表

  • User表:存放用户账户信息以及全局级别(所有数据库)权限,决定了来自哪些主机的哪些用户可以访问数据库实例,如果有全局权限则意味着对所有数据库都有此权限;

  • DB表:存放数据库级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库;

  • Tables_priv表:存放表级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库的这个表;

  • Columns_priv表:存放列级别的权限,决定了来自哪些主机的哪些用户可以访问此数据库的这个表的这个字段;

  • Procs_priv表:存放存储过程和函数级别的权限。

授权方式详解

mysql> GRANT <privileges> ON <what> TO <user> [IDENTIFIED BY "<password>"] [WITH GRANT OPTION];

privileges是一个用逗号分隔的你想要赋予的MySQL用户权限的列表。

  • #权限类型
  • 数据库/数据表/数据列权限(Alter、Create、Delete…)
  • 全局管理MySQL用户权限(file、PROCESS、reload、shutdown)
  • 特别的权限(all、usage)

user表中host列的值的意义

  • % 匹配所有主机
  • localhost localhost不会被解析成IP地址,直接通过UNIXsocket连接
  • 127.0.0.1 会通过TCP/IP协议连接,并且只能在本机访问;
  • ::1 ::1就是兼容支持ipv6的,表示同ipv4的127.0.0.1

WITH GRANT OPTION 权限传递

  • 如果带了 with grant option ,那么用户testuser1可以将select ,update权限传递给其他用户( 如testuser2)
  • 如果没带with grant option,那么用户testuser1不能给testuser2授权

权限的生效

  • 执行grant、revoke、set password、rename user命令修改权限后,MySQL会自动将修改后的权限信息同步加载到系统内存中;
  • 如果执行insert、update、delete操作上述的系统权限表后,则必须在执行刷新命令才能同步到内存
  • 如果是修改tables和colunms级别的权限,则客户端的下次操作时新权限会生效;
  • 如果是修改database级别的权限,则新权限在客户端执行use database命令后生效
  • –skip-grant-tables可以跳过所有系统权限表而允许所有用户登录

创建用户

create user 'test'@"localhost" identified by 'mysql';

回收权限

revole delete on *.* from 'test'@'localhost';

删除用户

drop user 'test'@'localhost';

mysql 全部权限

权限名字

意义

ALL

所有权限

ALL PROVILIEGSE

全部权限

ALERT

允许使用ALTER TABLE来改变表的结构,ALTER TABLE同时也需要CREATE和INSERT权限。重命名一个表需要对旧表具有ALTER和DROP权限,对新表具有CREATE和INSERT权限。

ALERT ROUTINE

允许改变和删除存储过程和函数

CREATE

允许创建新的数据库和表

CREATE ROUTINE

允许创建存储过程和包

CREATE TABLESPACE

允许创建、更改和删除表空间和日志文件组

CREATE TEMPPRARY TABLES

允许创建临时表

CREATE USER

允许更改、创建、删除、重命名用户和收回所有权限

CREATE VIEW

允许创建视图

DELETE

允许从数据库的表中删除行

DROP

允许删除数据库、表和视图

EVENT

允许在事件调度里面创建、更改、删除和查看事件

EXECUETE

允许执行存储过程和包

FILE

允许在服务器的主机上通过LOAD DATA INFILE、SELECT … INTO OUTFILE和LOAD_FILE()函数读写文件

GRANT OPTION

允许向其他用户授予或移除权限

INDEX

允许创建和删除索引

INSERT

允许向数据库的表中插入行

LOCK TABLE

允许执行LOCK TABLES语句来锁定表

PROCESS

允许显示在服务器上执行的线程信息,即被会话所执行的语句信息。这个权限允许你执行SHOW PROCESSLIST和mysqladmin processlist命令来查看线程,同时这个权限也允许你执行SHOW ENGINE命令

PROXY

允许用户冒充成为另外一个用户

REFERENCES

允许创建外键

RELOAD

允许使用FLUSH语句

REPLICATION CLIENT

允许执行SHOW MASTER STATUS,SHOW SLAVE STATUS和SHOW BINARY LOGS命令

REOLICATION SLAVA

允许SLAVE服务器连接到当前服务器来作为他们的主服务器

SELECT

允许从数据库中查询表

SHOW DATABASES

允许账户执行SHOW DATABASE语句来查看数据库。没有这个权限的账户只能看到他们具有权限的数据库

SHOW VIEW

允许执行SHOW CREATE VIEW语句

SHUTDOWN

允许执行SHUTDOWN语句和mysqladmin shutdown已经mysql_shutdown() C API函数

SUPER

允许用户执行CHANGE MASTER TO,KILL或mysqladmin kill命令来杀掉其他用户的线程,允许执行PURGE BINARY LOGS命令,通过SET GLOBAL来设置系统参数,执行mysqladmin debug命令,开启和关闭日志,即使read_only参数开启也可以执行update语句,打开和关闭从服务器上面的复制,允许在连接数达到max_connections的情况下连接到服务器。

TRIGGER

允许操作触发器

UPDATE

允许更新数据库中的表

USEAGE

代表没有任何权限,只能登陆

参考

MySQL-5.7权限详解