8.2.20 账户锁定
MySQL支持使用ACCOUNT LOCK和ACCOUNT UNLOCK子句来锁定或解锁用户账户,用于CREATE USER和ALTER USER语句:
-
如果密码验证组件启用,那么创建一个没有密码的账户是不可行的,即使账户被锁定。见Section 8.4.3,“The Password Validation Component”。 -
在使用ALTER USER时,这些子句指定现有账户的新锁定状态。在没有这两个子句的情况下,账户锁定状态保持不变。ALTER USER ... UNLOCK解锁因太多失败登录而被临时锁定的账户。见Section 8.2.15,“Password Management”。
账户锁定状态记录在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列存在。如果升级自MySQL版本低于5.7.6,需要执行MySQL升级程序以确保该列存在。见Chapter 3,Upgrading MySQL。对于非升级安装没有account_locked列的服务器,将视所有账户为未锁定,并使用ACCOUNT LOCK或ACCOUNT UNLOCK子句时产生错误。