在数据库服务中,权限管理可以用于针对不同的用户,限制登录管理数据库服务用户的操作行为,也可以区分不同用户的操作能力;
思考:系统权限和数据库权限作用在哪?
- 系统权限是作用于文件上的;
- 数据库权限是作用在用户上的,或者角色(相当于系统的用户组)上的;
数据库服务常见的权限管理定义设置:(采用具有的字符参数信息进行定义,并且权限是赋予数据库管理用户的)
数据库服务中可以授权的所有权限信息查看:

| 输出列 | 解释说明 |
|---|---|
| Privileges | 表示可以授权的所有权限信息展示 |
| Context | 表示设置的权限可以对数据库服务哪些资源进行操作 |
| Comment | 对相应的权限功能进行简单解释说明 |
常见的授权表信息
| 授权表名称 | 解释说明 |
|---|---|
| user | 主要用于存储用户、主机域、密码、加密插件等信息,同时还存储了*.*级别的权限(全局权限) |
| db | 主要用于存储用户、主机域等信息,同时还存储了单库级别的权限(局部权限) |
| tables_priv | 主要用于存储用户、主机域等信息,同时还存储了单表级别的权限(局部权限) |
说明:以上授权表信息了解作用即可,不建议采用手工方式对授权表中的数据进行修改调整
查看权限
mysql> show grants for candidate@'192.168.30.%';

用户授权
通过理解数据库内部结构,可以知晓,数据库是一个很大的仓库,里面包含多个库,每个库中有多个表,每个表中有多个行和列;
当然作为数据库服务管理用户,要管理的不仅仅是库和表,其实还有视图、触发器、存储过程等和数据库有关的信息;
因此,在某些时候创建完用户信息,还需要对创建的用户进行授权,就是让不同用户拥有管理库和表对象的权限。
进入到数据库环境中,执行以下SQL语句进行设置:
# 授权语法格式
MySQL> grant all on 授权对象范围 to 权限赋予用户信息
MySQL> grant all on * . * to blog@'192.168.30.%';
授权 权限 库 表 用户@主机域
# 对所有的数据库和所有的表进行授权
MySQL> grant all on *.*
# 对指定的数据库(zzp)中所有的表进行授权
MySQL> grant all on zzp.t1
# 对指定的数据库(zzp)中指定的表(t1)进行授权
MySQL> grant all on oldboy.t1
用户授权范例:
MySQL> grant all on *.* to candidate@'192.168.30.%';
MySQL> grant Insert,Delete,Update,Select on *.* to candidate@'192.168.30.%';
查看权限
mysql> show grants for candidate@'192.168.30.%';
注意:all privileges(all)包含查看的所有权限信息,但是唯独缺了Grant option,不能授权用户,此权限只能给root@local用户
创建管理员

回收权限
# 授权语法格式
MySQL> revoke 权限 on 授权对象范围 to 权限赋予用户信息
回收权限范例:
mysql> grant insert,update,delete,select on *.* to candidate@'192.168.30.%';
Query OK, 0 rows affected (0.00 sec)
-- 数据库服务用户授权操作
mysql> show grants for candidate@'192.168.30.%';
+---------------------------------------------------------------------------+
| Grants for [email protected].% |
+---------------------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE, DELETE ON *.* TO `candidate`@`192.168.30.%` |
+---------------------------------------------------------------------------+
1 row in set (0.00 sec)
-- 数据库服务用户权限授权成功
mysql> revoke delete on *.* from candidate@'192.168.30.%';
Query OK, 0 rows affected (0.00 sec)
-- 数据库服务用户回收权限
mysql> show grants for candidate@'192.168.30.%';
+-----------------------------------------------------------------+
| Grants for [email protected].% |
+-----------------------------------------------------------------+
| GRANT SELECT, INSERT, UPDATE ON *.* TO `candidate`@`192.168.30.%` |
+-----------------------------------------------------------------+
1 row in set (0.00 sec)
-- 数据库服务用户权限回收成功
role角色
之后版本,出现了数据库服务中对用户的role支持,表示可以将企业中常用的权限汇总打包为一个特定的role信息,在赋予给指定用户。
# 创建'dev'角色,白名单为'localhost'
mysql> create role 'dev'@'localhost';
# 创建group1和group2角色,白名单文‘%’
mysql> create role 'group1','group2'; # 不加@表示白名单为%