如何在 MySQL 中锁定用户帐户
本文介绍了在 MySQL 中如何锁定一个用户帐户。
某些特定的场景下,您可能想要锁定一个用户账户,比如:
- 创建一个锁定的用户,等授权完成后再解锁
- 此用户账户已经不被使用
- 此用户账户已经被泄露
- 此用户只是临时使用,使用完成后将用户锁定
要锁定一个已经存在的用户,请使用 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
语句。
对于一个锁定的用户,您可以通过解锁用户来让他恢复正常的使用。