帐户锁定
MySQL支持为 nd 语句使用ACCOUNT LOCK
nd ACCOUNT UNLOCK
子句锁定和解锁用户帐户:CREATE USER
ALTER USER
与一起使用时
CREATE USER
,这些子句指定新帐户的初始锁定状态。在没有任何一个子句的情况下,将以解锁状态创建帐户。如果
validate_password
启用了该组件,则即使该帐户已锁定,也将不允许创建没有密码的帐户。请参见“密码验证组件”。与一起使用时
ALTER USER
,这些子句为现有帐户指定新的锁定状态。在没有任何一个子句的情况下,帐户锁定状态保持不变。从MySQL 8.0.19开始,
ALTER USER ... UNLOCK
解锁由由于过多失败登录而被暂时锁定的语句命名的任何帐户。请参见“帐户密码管理”。
帐户锁定状态记录在系统表的 ccount_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
命名锁定帐户的子句的视图的能力。也就是说,锁定帐户不会影响使用代理帐户或存储的程序或视图的能力。
帐户锁定功能取决于系统表中该 ccount_locked
列的存在mysql.user
。对于从5.7.6之前的MySQL版本进行的升级,请执行MySQL升级过程以确保该列存在。请参见“升级MySQL”。对于没有 ccount_locked
列的未升级安装,服务器会将所有帐户视为已解锁,并且使用ACCOUNT LOCK
or ACCOUNT UNLOCK
子句会产生错误。