一、MYSQL8密码恢复
1、恢复密码
(1)停止服务
(2)修改配置文件(/etc/my.cnf)
(3)重启服务
(4)登入数据库
(5)切换当前数据库
(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.
查看:
③、密码管理的策略增强
1、mysql8.0开始容许限制重复使用以前的密码,就是在修改密码是不能修改为之前使用过的密码。
变量 | 解释 |
---|---|
password_history | 该参数值用于设置历史密码再次使用之前需要进行密码修改的次数。比如该参数等于3,即表示新密码不能和最近使用过3次的密码相同。若为0则不会对历史密码重用 进行限制 |
password_require_current | 默认值为OFF,当值为ON时候用户修改密码时候是否需要提供当前密码 |
password_reuse_interval | 按照日期指定限制。比如该值=60表示新密码不能和60天之内的密码相同。默认值为0,表示不会对历史密码重用进行实践间隔设置 |
2、查看:
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、把角色授权给某个用户
撤销角色:
(3)MYSQL权限表
三、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)创建用户
①、创建用户并授权
②、带过期时间用户的创建:
③、修改已创建用户密码的过期时间。
方法一:修改主配置文件
/etc/my.conf
方法二:设置全局策略
给特定的用户设置密码过期时间
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语句创建用户(该方法创建的用户没有面膜,需要改密后登录)
(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@'%'; #回收全部权限