用户管理进阶
锁定用户账户
某些特定的场景下,需要锁定一个用户账户,比如:
创建一个锁定的用户,等授权完成后再解锁
此用户账户已经不被使用
此用户账户已经被泄露
此用户只是临时使用,使用完成后将用户锁定
要锁定一个已经存在的用户,使用 ALTER USER .. ACCOUNT LOCK 语句。
要直接创建一个锁定的用户,使用 CREATE USER .. ACCOUNT LOCK 语句。
查询用户的锁定状态
可以在 mysql 数据库中的 user 表中查看用户的锁定状态。mysql.user 表中的 account_locked 列中保存了帐户是否被锁定的状态: Y 指示了此用户被锁定, N 指示了此用户未锁定
SELECT user, host, account_locked FROM mysql.user;

锁定现有的用户
ALTER USER 'user4'@'localhost' ACCOUNT LOCK;
# 查看效果
SELECT user, host, account_locked FROM mysql.user WHERE user = 'user4';

可以看到用户 user4 已经被锁定,现在使用 user4 登录会被 MySQL 拒绝访问。
创建锁定的用户
CREATE USER 'user1'@'%' IDENTIFIED BY '111111' ACCOUNT LOCK;
SELECT user, host, account_locked FROM mysql.user WHERE user = 'user1';

可以看到我们直接创建了一个锁定的用户,它无法进行登录
查看锁定用户的连接次数
MySQL 维护了一个变量 Locked_connects,它用来保存锁定的用户尝试连接到服务器的次数。当锁定的帐户尝试登录时,Locked_connects 变量的值将加 1。
SHOW GLOBAL STATUS LIKE 'Locked_connects';
# 我们使用 user1 尝试登录一次
SHOW GLOBAL STATUS LIKE 'Locked_connects';
在 DataGrip 中添加数据源时选择用户就相当于自动执行登录操作,所以我们使用 user1 尝试登录一次,此时 Locked_connects 变量的值会加 1 ,我们的登陆操作也被拒绝


解锁用户账户
要解锁一个或多个锁定的用户,使用 ALTER USER .. ACCOUNT UNLOCK 语句。
语法
ALTER USER [IF EXISTS] user@host [, user@host, ...] ACCOUNT UNLOCK;
其实和先前锁定用户类似。
示例
解锁 user1 账户
ALTER USER 'user1'@'%' ACCOUNT UNLOCK;
SELECT user, host, account_locked FROM mysql.user WHERE user = 'user1';
