6.2.15 帐户锁定

MySQL 支持使用CREATE USERALTER USER语句的ACCOUNT LOCKACCOUNT UNLOCK子句锁定和解锁用户帐户:

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

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

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

帐户锁定状态记录在mysql.user系统 table 的account_locked列中。 显示创建用户的输出指示帐户是锁定还是未锁定。

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

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

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

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