在数据库服务中,权限管理可以用于针对不同的用户,限制登录管理数据库服务用户的操作行为,也可以区分不同用户的操作能力;

思考:系统权限和数据库权限作用在哪?

  1. 系统权限是作用于文件上的;
  2. 数据库权限是作用在用户上的,或者角色(相当于系统的用户组)上的;

数据库服务常见的权限管理定义设置:(采用具有的字符参数信息进行定义,并且权限是赋予数据库管理用户的)

数据库服务中可以授权的所有权限信息查看:

image-20240611002930153

输出列解释说明
Privileges表示可以授权的所有权限信息展示
Context表示设置的权限可以对数据库服务哪些资源进行操作
Comment对相应的权限功能进行简单解释说明

常见的授权表信息

授权表名称解释说明
user主要用于存储用户、主机域、密码、加密插件等信息,同时还存储了*.*级别的权限(全局权限)
db主要用于存储用户、主机域等信息,同时还存储了单库级别的权限(局部权限)
tables_priv主要用于存储用户、主机域等信息,同时还存储了单表级别的权限(局部权限)

说明:以上授权表信息了解作用即可,不建议采用手工方式对授权表中的数据进行修改调整

查看权限

mysql> show grants for candidate@'192.168.30.%';

image-20240613213700662

用户授权

通过理解数据库内部结构,可以知晓,数据库是一个很大的仓库,里面包含多个库,每个库中有多个表,每个表中有多个行和列;

当然作为数据库服务管理用户,要管理的不仅仅是库和表,其实还有视图、触发器、存储过程等和数据库有关的信息;

因此,在某些时候创建完用户信息,还需要对创建的用户进行授权,就是让不同用户拥有管理库和表对象的权限。

进入到数据库环境中,执行以下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用户

创建管理员

image-20240613213833401

回收权限

# 授权语法格式
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';   # 不加@表示白名单为%