Documentation Home

6.2.20 账户锁定

ACCOUNT LOCKMySQL 支持使用andACCOUNT UNLOCK子句为CREATE USERand语句 锁定和解锁用户帐户 ALTER USER

  • 与 一起使用时CREATE USER,这些子句指定新帐户的初始锁定状态。在没有任何一个条款的情况下,帐户将以解锁状态创建。

    如果validate_password启用该组件,则不允许创建没有密码的帐户,即使该帐户已锁定。请参阅 第 6.4.3 节,“密码验证组件”

  • 与 一起使用时ALTER USER,这些子句指定现有帐户的新锁定状态。在没有任何一个条款的情况下,帐户锁定状态保持不变。

    从 MySQL 8.0.19 开始, ALTER USER ... UNLOCK解锁由于登录失败次数过多而暂时锁定的语句命名的任何帐户。请参阅 第 6.2.15 节,“密码管理”

帐户锁定状态记录在 系统表的account_locked列中 。mysql.user来自的输出 SHOW CREATE USER指示帐户是被锁定还是解锁。

如果客户端尝试连接到锁定的帐户,则尝试失败。服务器递增 Locked_connects指示连接到锁定帐户的尝试次数的状态变量,返回 ER_ACCOUNT_HAS_BEEN_LOCKED错误,并将消息写入错误日志:

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

锁定帐户不会影响使用假定锁定帐户身份的代理用户进行连接的能力。它也不影响执行具有DEFINER命名锁定帐户属性的存储程序或视图的能力。也就是说,使用代理帐户或存储的程序或视图的能力不受锁定帐户的影响。

帐户锁定功能取决于 系统表中account_locked列 的存在。mysql.user对于从早于 5.7.6 的 MySQL 版本升级,执行 MySQL 升级过程以确保此列存在。请参阅 第 2.11 节,“升级 MySQL”。对于没有account_locked列的未升级安装,服务器将所有帐户视为未锁定,使用ACCOUNT LOCKorACCOUNT UNLOCK子句会产生错误。