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
子句时产生错误。