MySQL 支持使用 ACCOUNT LOCK
和 ACCOUNT UNLOCK
子句为 CREATE USER
和 ALTER USER
语句锁定和解锁用户帐户。
当与
CREATE USER
一起使用时,这些子句指定新帐户的初始锁定状态。在没有这两个子句的情况下,帐户以解锁状态创建。如果启用了
validate_password
组件,即使帐户被锁定,也不允许创建没有密码的帐户。请参阅 第 8.4.3 节,“密码验证组件”。当与
ALTER USER
一起使用时,这些子句指定现有帐户的新锁定状态。在没有这两个子句的情况下,帐户锁定状态保持不变。ALTER USER ... UNLOCK
会解锁该语句命名的任何帐户,这些帐户由于登录失败次数过多而被暂时锁定。请参阅 第 8.2.15 节,“密码管理”。
帐户锁定状态记录在 mysql.user
系统表的 account_locked
列中。来自 SHOW CREATE USER
的输出指示帐户是锁定还是解锁。
如果客户端尝试连接到锁定帐户,则尝试将失败。服务器会增加 Locked_connects
状态变量,该变量指示尝试连接到锁定帐户的次数,返回 ER_ACCOUNT_HAS_BEEN_LOCKED
错误,并向错误日志写入消息。
Access denied for user 'user_name'@'host_name'.
Account is locked.
锁定帐户不会影响使用假定锁定帐户身份的代理用户进行连接。它也不会影响执行具有命名锁定帐户的 DEFINER
属性的存储程序或视图。也就是说,使用代理帐户或存储程序或视图的能力不受锁定帐户的影响。
帐户锁定功能取决于 mysql.user
系统表中是否存在 account_locked
列。对于从早于 5.7.6 的 MySQL 版本升级,请执行 MySQL 升级过程以确保该列存在。请参阅 第 3 章,升级 MySQL。对于没有 account_locked
列的未升级安装,服务器将所有帐户视为解锁,并且使用 ACCOUNT LOCK
或 ACCOUNT UNLOCK
子句会产生错误。