How To Lock User Accounts in MySQL

摘要:在本教程中,您将学习如何使用CREATE USER .. ACCOUNT LOCKALTER TABLE .. ACCOUNT LOCK语句来锁定 MySQL 服务器中的用户帐户。

要锁定用户帐户,您可以使用CREATE USER .. ACCOUNT LOCK语句:

CREATE USER account_name
IDENTIFIED BY 'password'
ACCOUNT LOCK;
Code language: SQL (Structured Query Language) (sql)

如果省略ACCOUNT LOCK子句,则CREATE USER语句默认会创建处于解锁状态的新用户

或者您可以使用ALTER USER .. ACCOUNT LOCK语句来锁定现有用户帐户:

ALTER USER account_name
IDENTIFIED BY 'password'
ACCOUNT LOCK;
Code language: SQL (Structured Query Language) (sql)

MySQL 将帐户锁定状态记录在mysql.user系统表的account_locked列中。 YN值分别表示锁定和解锁。

MySQL 锁定用户帐户

请注意,要解锁用户帐户,请使用ALTER USER .. ACCOUNT UNLOCK语句。

锁定用户帐户示例

让我们举一些锁定用户帐户的示例。

A) 使用ACCOUNT LOCK锁定新帐户示例

首先,创建一个处于锁定状态的新用户帐户david@localhost

CREATE USER david@localhost
IDENTIFIED BY 'Secret!Pass1'
ACCOUNT LOCK;
Code language: SQL (Structured Query Language) (sql)

其次,显示用户帐户及其状态:

SELECT 
    user, host, account_locked
FROM
    mysql.user
WHERE
    user = 'david' AND 
    host='localhost';
Code language: SQL (Structured Query Language) (sql)

mysql.user表中的account_locked列指示帐户是否被锁定, Y表示锁定, N表示未锁定。

第三,使用用户帐户david连接MySQL服务器,会收到错误:

mysql -u david -p
Enter password: ************
Code language: SQL (Structured Query Language) (sql)

这是错误消息:

ERROR 3118 (HY000): Access denied for user 'david'@'localhost'. Account is locked.
Code language: SQL (Structured Query Language) (sql)

B) 使用ACCOUNT LOCK锁定现有用户帐户示例

首先,创建一个用户帐户dolphin@localhost

CREATE USER dolphin@localhost
IDENTIFIED BY 'Secret!pass1';
Code language: SQL (Structured Query Language) (sql)

其次,使用用户帐户dolphin@localhost登录MySQL服务器:

mysql -u dolphin -p
Enter password: ********
Code language: SQL (Structured Query Language) (sql)

用户帐户dolphin@localhost可以成功登录。

第三,使用ALTER TABLE LOCK ACCOUNT语句锁定用户帐户dolphin@localhost

ALTER USER dolphin@localhost
ACCOUNT LOCK;
Code language: SQL (Structured Query Language) (sql)

四、显示用户状态:

SELECT 
    user, host, account_locked
FROM
    mysql.user
WHERE
    user = 'dolphin';
Code language: SQL (Structured Query Language) (sql)

用户帐户dolphin按预期被锁定。

Locked_connects变量状态变量显示使用锁定帐户尝试连接到 MySQL 服务器的次数。

当锁定的帐户尝试登录时,MySQL 将Locked_connects状态变量加 1。

要显示锁定帐户的尝试次数,请使用以下命令:

SHOW GLOBAL STATUS 
LIKE 'Locked_connects';
Code language: SQL (Structured Query Language) (sql)

在本教程中,您将学习如何使用CREATE USER .. ACCOUNT LOCKALTER TABLE .. ACCOUNT LOCK语句来锁定 MySQL 服务器中的用户帐户。

本教程有帮助吗?