MySQL 锁定账户

2025年3月17日 | 阅读 3 分钟

锁是一种机制,用于防止未经授权修改我们的数据库。它对我们数据库的安全至关重要。在本文中,我们将学习如何使用 CREATE USER… ACCOUNT LOCKALTER TABLE… ACCOUNT LOCK 语句来锁定 MySQL 服务器中的用户账户。

我们可以使用 CREATE USER... ACCOUNT LOCK 语句来锁定用户账户,如下所示:

ACCOUNT LOCK 子句 指定新用户账户的初始锁定状态。如果我们未使用该语句指定此子句,则新创建的用户默认处于未锁定状态。如果在用户创建期间启用了 validate_password 插件,则即使账户被锁定,我们也无法在没有密码的情况下创建账户。

MySQL 还允许我们使用 ALTER USER… ACCOUNT LOCK 语句来锁定现有用户账户,如下所示:

如果我们未使用该语句指定 ACCOUNT LOCK 子句,则账户锁定状态将保持不变。

MySQL 使用 mysql.user 系统表的 account_locked 列 来存储账户锁定状态。我们可以使用 SHOW CREATE USER 语句来验证账户是解锁还是锁定。如果该列的值为 Y,则表示账户已锁定。如果包含 N,则表示账户已解锁。

如果我们尝试访问被锁定的账户,尝试将失败,并且 MySQL 会发出错误,将以下消息写入错误日志:

MySQL 用户账户锁定示例

让我们通过示例来理解锁定用户账户的工作原理。

1. 使用 ACCOUNT LOCK 子句锁定新用户账户

首先,我们将以锁定状态创建一个名为 javatpoint@localhost 的新用户账户,使用以下语句:

接下来,我们将执行以下语句来显示用户账户及其状态:

我们应该得到以下输出:

MySQL Lock Account

在此输出中,我们可以看到 mysql.user 系统表中的 account_locked 列显示为 Y。这意味着用户名 javatpoint 在服务器上已被锁定。

如果我们尝试访问用户账户 javatpoint 来连接 MySQL 服务器,尝试将失败,并且我们将收到错误。

这是错误消息

MySQL Lock Account

2. MySQL 现有用户账户锁定

我们可以通过以下语句创建一个名为 markus@localhost 的新用户账户来理解这一点:

接下来,我们将使用新创建的用户账户 markus@localhost 登录 MySQL 服务器,如下所示:

我们将获得以下输出,这意味着用户账户 markus@localhost 已成功登录。

MySQL Lock Account

现在,我们将使用 ALTER TABLE LOCK ACCOUNT 语句来锁定此用户账户,如下所示:

再次,我们将执行以下语句来显示用户状态:

我们可以看到以下输出,表明用户账户 markus 已成功锁定:

MySQL Lock Account

如果我们想显示尝试连接 MySQL 服务器的被锁定账户的数量,我们需要 locked_connects 变量。每次我们尝试连接被锁定的用户账户时,MySQL 都会将此变量的状态增加 1。请参阅以下命令:

执行后,我们将获得此输出,显示我们已尝试三次连接被锁定的用户账户。

MySQL Lock Account
下一主题MySQL 解锁账户