目录

如何在 MySQL 中锁定用户帐户

某些特定的场景下,您可能想要锁定一个用户账户,比如:创建一个锁定的用户,等授权完成后再解锁此用户账户已经不被使用此用户账户已经被泄露此用户只是临时使用,使用完成后将用户锁定要锁定一个已经存在的用户,请使用ALTERUSER..ACCOUNTLOCK语句。要直接创建一个锁定的用户,请使用CREATEU

某些特定的场景下,您可能想要锁定一个用户账户,比如:

  • 创建一个锁定的用户,等授权完成后再解锁
  • 此用户账户已经不被使用
  • 此用户账户已经被泄露
  • 此用户只是临时使用,使用完成后将用户锁定

要锁定一个已经存在的用户,请使用 ALTER USER .. ACCOUNT LOCK 语句。

要直接创建一个锁定的用户,请使用 CREATE USER .. ACCOUNT LOCK 语句。

查询用户的锁定状态

您可以在 mysql 数据库中的 user 表中查看用户的锁定状态。mysql.user 表中的 account_locked 列中保存了帐户是否被锁定的状态: Y 指示了此用户被锁定, N 指示了此用户未锁定。

请使用以下 SQL 语句查询 MySQL 数据库服务器中的所有用户的锁定状态:

SELECT user, host, account_locked
FROM mysql.user;
+------------------+-----------+----------------+
| user             | host      | account_locked |
+------------------+-----------+----------------+
| root             | %         | N              |
| sqliz            | %         | N              |
| test_role1       | %         | Y              |
| test_role2       | %         | Y              |
| test_user1_new   | %         | N              |
| test_user2_new   | %         | N              |
| test_user3_new   | %         | N              |
| testuser         | %         | N              |
| mysql.infoschema | localhost | Y              |
| mysql.session    | localhost | Y              |
| mysql.sys        | localhost | Y              |
| root             | localhost | N              |
+------------------+-----------+----------------+

锁定一个现有的用户

要锁定一个现有的用户,你应该使用 ALTER USER .. ACCOUNT LOCK 语句。

下面的 SQL 语句将锁定用户账户 'sqliz'@'%'。请先参考 MySQL 创建用户教程创建用户 'sqliz'@'%'

请使用 root 账户或者其他管理员账户执行下面的语句:

ALTER USER 'sqliz'@'%' ACCOUNT LOCK;

要查询 用户账户 'sqliz'@'%' 的锁定状态,请运行以下 SQL 语句:

SELECT user, host, account_locked
FROM mysql.user
WHERE user = 'sqliz' AND host = '%';
+-------+------+----------------+
| user  | host | account_locked |
+-------+------+----------------+
| sqliz | %    | Y              |
+-------+------+----------------+

这里, account_locked 列中的 Y 表明用户账户 'sqliz'@'%' 已经被锁定。

在 mysql client 中尝试使用 sqliz 登录,已验证用户是否真正的被锁定。

mysql -u sqliz -p

输入密码 sqliz 并按下 Enter

Enter password: ********

由于用户已经被锁定,MySQL 服务器将会给出错误提示: “ERROR 3118 (HY000): Access denied for user ‘sqliz’@‘192.168.0.204’. Account is locked.”

创建一个锁定的用户

要直接创建一个锁定的用户,请使用 CREATE USER .. ACCOUNT LOCK 语句。

假设,要创建新用户 sqliz2, 请执行下面的语句:

CREATE user 'sqliz2'@'%'
IDENTIFIED by 'SqLiZ9879123!'
ACCOUNT LOCK;

这里创建了一个用户名为 sqliz2 且允许在任何主机连接的用户,并且此用户是锁定的。

要查询 用户账户 'sqliz2'@'%' 的锁定状态,请运行以下 SQL 语句:

SELECT user, host, account_locked
FROM mysql.user
WHERE user = 'sqliz2' AND host = '%';
+--------+------+----------------+
| user   | host | account_locked |
+--------+------+----------------+
| sqliz2 | %    | Y              |
+--------+------+----------------+

锁定用户的连接次数

MySQL 维护了一个变量 Locked_connects,它用来保存锁定的用户尝试连接到服务器的次数。当锁定的帐户尝试登录时,Locked_connects 变量的值将加 1。

您可以使用下面的语句查看当前 MySQL 数据库服务器上锁定用户尝试登录的次数:

SHOW GLOBAL STATUS LIKE 'Locked_connects';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| Locked_connects | 3     |
+-----------------+-------+

注意,您的结果可能会有所不同。

结论

在 MySQL 中您可以通过以下两种方法锁定用户:

  • 要锁定一个已经存在的用户,请使用 ALTER USER .. ACCOUNT LOCK 语句。
  • 要直接创建一个锁定的用户,请使用 CREATE USER .. ACCOUNT LOCK 语句。

对于一个锁定的用户,您可以通过解锁用户来让他恢复正常的使用。