第一章 账户与安全
一、用户创建与授权
1.1、用户创建和授权
1.1.1、MySQL5.7版本创建用户
1.1.2、MySQL8.0版本创建用户
在8.0版本中查询用户信息的时候会发现多了一个用户,如下图所示
使用MySQL5.7中的语句在MySQL8.0中执行创建用户,发现报错如下图
分开执行创建用户和授权的语句
1.2、认证插件更新
1.2.1、MySQL5.7与MySQL8.0的身份认证插件的区别
在MySQL5.7中执行语句查看身份认证插件如下图:
在MySQL8.0中执行语句查看身份认证插件,如下图:
或者通过mysql的user表查看身份认证插件,如下图:
1.2.1、在不更改客户端的情况下如何登陆
1.2.1.1、重启修改配置文件的方式
在Linux系统中找到数据库的配置文件,一般如下
more /etc/my.cnf
如果我们需要使用老的方式,我们可以把这行注释去掉,然后重启MySQL的服务
1.2.1.2、修改mysql数据库中user表
1.3、密码管理
1.3.1、密码策略
查询当前的密码策略,可以看到当前时没有开启任何策略的。
1.3.2、修改全部配置
1.3.2.1、修改MySQL的配置文件的方式
编辑配置文件
vi /etc/my.cnf
然后重启mysql服务。
1.3.2.2、设置全局变量的方式
进入mysql后,执行
set global 参数
但是这种方式由于没有做持久化,只对当前进程有效,如果重启mysql服务之后则设置的全局变量会无效。
1.3.2.3、MySQL8.0设置持久化的全局变量的方式
如下图中的这种设置方式,则在重启服务后也会有效。
set persist password_history=6;
这种方式的原理是因为在如图的目录下,MySQL8.0创建了这个配置文件。
1.3.3、修改某个用户的配置
修改tony的策略:
查看针对用户的配置是否生效:
测试配置的策略:
上面的这个配置项成功是因为在mysqll数据库中多了一张password_history的表,在这张表中记录了修改记录。
1.3.3、password_require_current变量的配置说明
- 1.设置修改密码时需要使用原密码;当我们使用root用户操作修改tony的密码的时候,我们可以看到可以直接被修改,那是因为root用户拥有的权限比较高。
- 2.使用tony用户修改自身的密码;首先将当前的mysql用户切换到tony用户。
1.4、角色管理
准备工作:创建一个测试用的数据库和一个表
create database testdb;
create table testdb.t1(id int);
1.4.1、通过角色的方式授权
1.4.1.1、创建用户和角色并为角色授权
创建一个角色后,我们发现这个角色的数据就在mysql数据库的user表中,即mysql在用户表中模拟了一个角色。
为创建的角色授权
查询user1用户的write_role角色的权限有哪些
1.4.1.2、使用新建的用户测试所分配的角色的权限是否有效
用新建的user1用户访问testdb数据库的t1表,发现访问被拒绝,也就是没有权限访问。
查询当前用户所激活的权限,发现user1用户当前没有被激活的权限,通过set语句激活当前用户的权限后,重新执行查询语句
1.4.1.3、为用户设置默认的角色
MySQL8.0中针对角色部分的表结构介绍,
default_roles表是用户默认拥有的角色的信息
role_edges表是用户角色授权信息表
1.4.1.4、收回角色的权限