### 6.2.20 帐户锁定

[](<>)

MySQL 支持使用`帐户锁定`和`帐户解锁`的条款[`创建用户`](create-user.html)和[`更改用户`](alter-user.html)声明：

-   当与[`创建用户`](create-user.html)，这些子句指定新帐户的初始锁定状态。在没有任何条款的情况下，该帐户在解锁状态下创建。

    如果`验证密码`组件已启用，即使帐户被锁定，也不允许创建没有密码的帐户。看[第 6.4.3 节，“密码验证组件”](validate-password.html).

-   当与[`更改用户`](alter-user.html)，这些子句指定现有帐户的新锁定状态。在没有任何一个子句的情况下，帐户锁定状态保持不变。

    从 MySQL 8.0.19 开始，[`更改用户...解锁`](alter-user.html)解锁由于登录失败次数过多而暂时锁定的语句命名的任何帐户。看[第 6.2.15 节，“密码管理”](password-management.html).

    帐户锁定状态记录在`帐户被锁定`的列`mysql.user`系统表。从输出[`显示创建用户`](show-create-user.html)指示帐户是锁定还是解锁。

    如果客户端尝试连接到锁定的帐户，则尝试失败。服务器递增[`Locked_connects`](server-status-variables.html#statvar_Locked_connects)指示尝试连接到锁定帐户的次数的状态变量，返回一个[`ER_ACCOUNT_HAS_BEEN_LOCKED`](https://dev.mysql.com/doc/mysql-errors/8.0/en/server-error-reference.html#error_er_account_has_been_locked)错误，并将消息写入错误日志：


```
Access denied for user 'user_name'@'host_name'.
Account is locked.
```

锁定帐户不会影响使用代理用户进行连接的能力，该代理用户采用锁定帐户的身份。它也不影响执行存储程序或视图的能力`定义者`属性命名锁定的帐户。也就是说，使用代理帐户或存储的程序或视图的能力不受锁定帐户的影响。

帐户锁定能力取决于是否存在`帐户被锁定`列中的`mysql.user`系统表。对于从低于 5.7.6 的 MySQL 版本升级，请执行 MySQL 升级过程以确保此列存在。看[第 2.11 节，“升级 MySQL”](upgrading.html).对于没有升级的未升级安装`帐户被锁定`列，服务器将所有帐户视为已解锁，并使用`帐户锁定`要么`帐户解锁`子句产生错误。
