一、MYSQL8密码恢复

1、恢复密码

(1)停止服务


mysql密码设置规则 mysql 密码规则_mysql密码设置规则


(2)修改配置文件(/etc/my.cnf)

mysql密码设置规则 mysql 密码规则_mysql_02


(3)重启服务

mysql密码设置规则 mysql 密码规则_mysql密码设置规则_03


(4)登入数据库

mysql密码设置规则 mysql 密码规则_数据库_04


(5)切换当前数据库

mysql密码设置规则 mysql 密码规则_mysql_05


(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.

查看:

mysql密码设置规则 mysql 密码规则_数据库_06


mysql密码设置规则 mysql 密码规则_ide_07


③、密码管理的策略增强

1、mysql8.0开始容许限制重复使用以前的密码,就是在修改密码是不能修改为之前使用过的密码。

变量

解释

password_history

该参数值用于设置历史密码再次使用之前需要进行密码修改的次数。比如该参数等于3,即表示新密码不能和最近使用过3次的密码相同。若为0则不会对历史密码重用 进行限制

password_require_current

默认值为OFF,当值为ON时候用户修改密码时候是否需要提供当前密码

password_reuse_interval

按照日期指定限制。比如该值=60表示新密码不能和60天之内的密码相同。默认值为0,表示不会对历史密码重用进行实践间隔设置

2、查看:

mysql密码设置规则 mysql 密码规则_mysql_08


3、设置方式

地址:/usr/local/mysql/data/mysql-auto.cnf

mysql密码设置规则 mysql 密码规则_mysql_09


针对全部

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’;

创建一个角色

mysql密码设置规则 mysql 密码规则_mysql_10

查看用户信息表,这里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’;

将角色授予用户

mysql密码设置规则 mysql 密码规则_mysql密码设置规则_11

mysql密码设置规则 mysql 密码规则_mysql密码设置规则_12

exit

退出

mysql密码设置规则 mysql 密码规则_ide_13

用yonghu_role1用户登录

mysql密码设置规则 mysql 密码规则_mysql_14

实际table_auth表存在的,也拥有权限去查询

mysql密码设置规则 mysql 密码规则_数据库_15

查看当前角色,默认没有激活这就是没法查询原因

mysql密码设置规则 mysql 密码规则_ide_16

设置角色,再次查询就可以

mysql密码设置规则 mysql 密码规则_mysql密码设置规则_17

重新登录,为每个用户设置默认角色

mysql密码设置规则 mysql 密码规则_数据库_18

查看用户角色信息,这个是mysql8新增加的表。下面是用户所设置到角色的信息

撤销角色:

mysql密码设置规则 mysql 密码规则_数据库_19


(3)MYSQL权限表

mysql密码设置规则 mysql 密码规则_mysql密码设置规则_20


三、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)创建用户

①、创建用户并授权

mysql密码设置规则 mysql 密码规则_mysql_21


②、带过期时间用户的创建:

mysql密码设置规则 mysql 密码规则_ide_22


③、修改已创建用户密码的过期时间。

方法一:修改主配置文件

/etc/my.conf

mysql密码设置规则 mysql 密码规则_ide_23


方法二:设置全局策略

mysql密码设置规则 mysql 密码规则_mysql_24

给特定的用户设置密码过期时间
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语句创建用户(该方法创建的用户没有面膜,需要改密后登录)

mysql密码设置规则 mysql 密码规则_mysql密码设置规则_25


(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@'%';  #回收全部权限