MYSQL8安全机制

一、MYSQL8密码恢复
1、恢复密码
(1)停止服务
在这里插入图片描述
(2)修改配置文件(/etc/my.cnf)
在这里插入图片描述
(3)重启服务
在这里插入图片描述
(4)登入数据库
MYSQL8安全机制_第1张图片
(5)切换当前数据库
MYSQL8安全机制_第2张图片
(6)修改数据库密码 (修改配置文件中的skig*为注释)
①、mysql5.7版本

update user set authentication_string=password('123456') where user='root' and Host='localhost'

②、mysql8.0以上版本

1、flush privileges
2、alter user 'root'@'localhost' identified by 'mysqlMYSQL.123'

(7)退出数据库并停止服务

exit
systemctl stop mysqld

(8)重启后重新登入系统`

systemctl start mysqld
mysql -uroot -p新密码

二、mysql8新特性
(1)Role规则
类似于一个权限的集合。
Role可以被创建,修改和删除,并作用到其所属于的账户上。
(2)权限控制
账号于安全变更,增加新的安全策略,增加角色功能。
①、创建用户和用户授权的命令是分开执行的
1、mysql5.7 创建和授权可以一步进行

grant all privileges on *.* to 'test'@'%' identified by 'mysqlMYSQL.123';

2、mysql8.0 创建和授权分两步进行

<1>create user 'test'@'%' identified by 'mysqlMYSQL.123'; #创建用户
<2>grant  all privileges on *.* to 'test'@'%'; #授权

②、认证的插件更新
mysql8.0中默认的身份插件是caching_sha2_password.
查看:
MYSQL8安全机制_第3张图片
MYSQL8安全机制_第4张图片
③、密码管理的策略增强
1、mysql8.0开始容许限制重复使用以前的密码,就是在修改密码是不能修改为之前使用过的密码。

变量 解释
password_history 该参数值用于设置历史密码再次使用之前需要进行密码修改的次数。比如该参数等于3,即表示新密码不能和最近使用过3次的密码相同。若为0则不会对历史密码重用 进行限制
password_require_current 默认值为OFF,当值为ON时候用户修改密码时候是否需要提供当前密码
password_reuse_interval 按照日期指定限制。比如该值=60表示新密码不能和60天之内的密码相同。默认值为0,表示不会对历史密码重用进行实践间隔设置

2、查看:
MYSQL8安全机制_第5张图片
3、设置方式
地址:/usr/local/mysql/data/mysql-auto.cnf在这里插入图片描述
针对全部

set persist password_history=6

针对用户

select user,host,password_reuse_history from mysql.user;#查看
alter user 'test'@'%' password history 10;

④、角色管理

步骤:
    1、先创建角色
    2、给这个角色赋予实现定义好的权限
    3、把角色授权给某个用户
操作步骤 说明
mysql> create database roleDB; 创建一个数据库
mysql> create table roleDB.table_auth(id int); 创建一张表
mysql> create role ‘write_role’; 创建一个角色
MYSQL8安全机制_第6张图片 查看用户信息表,这里write_role是一个没有密码的用户。即角色其实是一个用户 ,即用用户来模拟角色的效果
mysql> grant select,insert,update,delete on roleDB.* to ‘write_role’; 授权,授权roleDB库上的增删改查权限。
mysql> create user ‘yonghu_role1’ identified by ‘mysqlMYSQL.123’; 创建用户并赋予密码
mysql> grant ‘write_role’ to ‘yonghu_role1’; 将角色授予用户
MYSQL8安全机制_第7张图片
MYSQL8安全机制_第8张图片
exit 退出
MYSQL8安全机制_第9张图片 用yonghu_role1用户登录
在这里插入图片描述 实际table_auth表存在的,也拥有权限去查询
MYSQL8安全机制_第10张图片 查看当前角色,默认没有激活这就是没法查询原因
MYSQL8安全机制_第11张图片 设置角色,再次查询就可以
在这里插入图片描述 重新登录,为每个用户设置默认角色
MYSQL8安全机制_第12张图片 查看用户角色信息,这个是mysql8新增加的表。下面是用户所设置到角色的信息

撤销角色:
MYSQL8安全机制_第13张图片
(3)MYSQL权限表
MYSQL8安全机制_第14张图片
三、mysql8用户管理
(1)登录和退出MYSQL
①、登入

mysql -h92.168.142.44 -P 3306 -uroot -p123 -e 'select user,host from user'
-h :指定主机名
-P:MYSQL服务端口名
-u:指定用户名
-p:指定登录密码
-e:接SQL语句

②、登出

1、\q
2、exit
3、quit

(2)创建用户
①、创建用户并授权
MYSQL8安全机制_第15张图片
②、带过期时间用户的创建:
MYSQL8安全机制_第16张图片
③、修改已创建用户密码的过期时间。
方法一:修改主配置文件
/etc/my.conf
MYSQL8安全机制_第17张图片
方法二:设置全局策略
在这里插入图片描述

给特定的用户设置密码过期时间
mysql> alter user 'test01'@'localhost' password expire interval 90 day;
Query OK, 0 rows affected (0.49 sec)

④、禁用密码过期策略

create user 'test02'@'localhost' password expire never;
alter user 'test02'@'localhost' password expire never;

⑤、引用密码默认策略

create user 'test02'@'localhost' password expire default;
alter user 'test02'@'localhost' password expire default;

⑥、insert语句创建用户(该方法创建的用户没有面膜,需要改密后登录)
MYSQL8安全机制_第18张图片
(3)删除用户
①、DROP user 语句删除

mysql> drop user 'user2'@'localhost';
Query OK, 0 rows affected (0.72 sec)

②、delete语句删除

mysql> delete from mysql.user where user='test01' and host='192.168.142.%' ;
Query OK, 0 rows affected (0.37 sec)

(4)修改用户密码
①、root修改自己的密码
方法一:

mysqladmin -uroot -p原密码 password '新密码'

方法二:(登录数据库后修改)

flush privileges;
alter user 'root'@'%' identified with mysql_native_password by '新密码'
flush privileges

方法三:

mysql> select host,user,authentication_string,plugin from user;
mysql> update user set authentication_string ='新密码' where user='root'; (直接修改将无法登录)

②、root修改其他用户的密码
方法一:

mysql>use mysql;
mysql>alter user 'test01'@'localhost' identified with mysql_native_password by '新密码';

方法二:

mysql>use mysql;
mysql>set password for 'test04'@'localhost'='新密码';
mysql>flush privileges;

③、普通用户修改自己的密码

mysqladmin -uzhuzhu -p原密码 password '新密码';

(5)修改客户端用户

mysql>use mysql;
mysql>create user 'anliu02'@'localhost' identified by '密码';
mysql>update user set host='%' where user='user02';
mysql>flush privileges;

四、mysql8权限管理
(1)应用顺序
user (Y|N) ==> db ==> tables_priv ⇒ columns_priv
(2)用户授权

语法格式:
grant 权限列表 on 库名.表名 to 用户名@‘客户端主机名’ {identified by '密码' with_option参数};

权限列表:
 all               所有权限(不包括授权权限)
 select、update     
 
数据库.表名
*.*              所有库下的所有表
web.*         web库下的所有表
web.student   web库下的student表

客户端主机
%                             所有主机
192.168.142.%       192.168.142.%网段的所有主机
192.168.142.144      指定主机
local host                  指定主机

with_option参数
grant option              授权选项
max_queries_per_hour;     定义每小时允许执行的查询数
max_updates_per_hour;     定义每小时允许执行的更新数
max_connections_per_hour;     定义每小时可以建立的连接数
max_user_connections;           定义单个用户同时可以建立的连接数

例:
①、grant select,update,delete on school.* to anliu@’%’;
②、grant all on school.* to anliu@’%’;
③、alter user ‘anliu01’@‘localhost’ with max_queries_per_hour 90;

(3)权限查看

语法:
show grants\G   查看当前用户
show grants for admin@'%'\G   查看指定用户

(4)权限回收

语法:
revoke 权限列表 on 数据库名 from 用户名@‘客户端主机’;
例:
revoke delete on *.* from admin@'%'; #回收部分权限
revoke all privileges on *.* from admin@'%';  #回收全部权限

你可能感兴趣的:(MYSQL8安全机制)