在MySQL8.0以前版本,给MySQL更改密码,明确写到开发规范中,拒绝更在线更改更密码,因为在8.0以前操作非常麻烦且不太完美。
MySQL 8.0之前的处理方法:
1. 创建一个同样权限的帐号通过
show grants for ‘user_name'@’172.168.0.%';
复制
获取到原始权限,然后创建新帐号,可以添加_vX这种形式,例如:
create user 'user_name_v2'@'172.168.0.%' identified by 'new_password';
复制
利用show grants for获取的授权语句,对新用户授权。
2. 确认新帐号可以登录且权限Ok
3. 更新现网应用配置,并重启或是刷新配置,让配置生效
4. 删除老用户:
mysql>drop user 'user_name'@'172.168.0.%';
复制
通过一个变通的办法实现用一个新用户替代老用户,从而实现改用户密码的需求。但这里并不太太完美,用户名变更了。如里需要还是原来的用户名,这个感觉还需要在来一次这样的操作。
现在福利来了:
从MySQL 8.0.14版本开始,对于用户密码这块引入了一个新特性:一个用户支持同时有两个密码。
直接上操作:
上面同一个帐号两个密码都是可以登录成功。
当运行完:alter user 'wubx'@'%' discard old password; 后
原来密码: wubxwubx 已经失效。
通过这个特性对今后MySQL 8.0.14后的版本变密码流程就相对简单很多。
特别提示:想使用这个特性的用户需要具备MySQL8.0后的新权限:APPLICATION_PASSWORD_ADMIN。另外要注意以下几点:
- retain current password是声明当前的第二个密码,多次声明,最后一个生效。用户可以同时用原来密码和声明的新密码登录
- retain current password语句中不能指定空密码
- 在指定了retain current password后 ,又使用alter user更改原来的主密码,利用retain current password声明的第二密码不会变更。
- 如果在使用retain current password后,又更改认正模式,声明的第二密码失效。
- 如果没有使用retain current passwod,使用alter user .. discard old password ;不会把原来的密码删掉。