Write by lyc at 2020-11-30
参考博文:MySQL–禁用账号和设置账号有效期

1.MySQL 不同版本禁用账号的方式

在MySQL 5.7 版本之前(MySQL5.5/5.6),不能对账号进行锁定或设置过期,只能通过更新密码来实现。

在MySQL 5.7版本中,可以通过两种方式禁用账户:

  1. 设置账号自动过期时间
  2. 锁定账号

2.MySQL5.7 设置账号过期

从MySQL 5.7.10开始,参数 default_password_lifetime 默认值从0变更为360,即一年有效期。

1
2
3
4
5
6
7
8
# 修改默认自动过期时间:
mysql > SET GLOBAL default_password_lifetime = 0;

# 设置用户密码过期
mysql > ALTER USER 'user'@'localhost' PASSWORD EXPIRE;

# 设置用户密码永不过期
mysql > ALTER USER 'user'@'localhost' PASSWORD EXPIRE NEVER;

3.MySQL5.7 锁定账号

立即生效,无需刷新权限表(无需 flush privileges;

1
2
3
4
5
# 锁定
mysql > ALTER USER 'user'@'localhost' ACCOUNT LOCK;

# 解锁
mysql > ALTER USER 'user'@'localhost' ACCOUNT UNLOCK;

4.我在什么环境下使用过这个功能

外网线上有两套mysql数据库,正式库与测试库。为了QA测试能够更好的模拟线上环境测试,又不影响正式库数据,在业务低谷期间会把正式库的数据同步到测试库。

同样的正式和测试服务器的应用程序分别连正式和测试mysql,区别是mysql用户不同。比如测试站连 test@host

测试用户 test@host 在正式库的状态是 ACCOUNT LOCK; 的,执行数据同步完成后,脚本只需要再测试库对 test@host 解锁 ACCOUNT UNLOCK 即可。测试机的应用即便是配错,连到正式库也无法连接成功。