Error number: 3118; Symbol: ER_ACCOUNT_HAS_BEEN_LOCKED; SQLSTATE: HY000
Message: Access denied for user ‘%s’@’%s’. Account is locked.
错误说明
ER_ACCOUNT_HAS_BEEN_LOCKED错误(错误号3118)是MySQL中常见的访问权限错误。发生此错误的原因是用户尝试以一个锁定的MySQL用户账户连接。MySQL可以通过管理员账户将其他用户账户锁定,以防止其访问数据库资源。
常见案例
ER_ACCOUNT_HAS_BEEN_LOCKED错误在MySQL数据库环境中很常见,尤其是当管理员担心出现未经允许的访问时,这种错误就会频繁发生。另一种情况是当MySQL安装完成后,默认用户帐户可能被锁定,其结果是MySQL无法以管理员帐户登录,MySQL会显示ER_ACCOUNT_HAS_BEEN_LOCKED错误。
解决方法
要解决ER_ACCOUNT_HAS_BEEN_LOCKED错误,首先需要确认哪一个MySQL用户账户被锁定了,然后再使用root权限登录MySQL,执行“unlock account”语句来取消用户账户的锁定状态,取消锁定的操作格式如下:
UNLOCK ACCOUNTS [FOR user [@’host_name’]];
运行此语句后,用户就可以正常登录MySQL了。
此外,也可以使用MySQL提供的指令来更改被锁定用户账户的密码,首先使用root用户执行以下SET PASSWORD语句来更改密码:
SET PASSWORD FOR ‘user’@’host_name’=PASSWORD(‘new_password’);
执行此语句后,用户就可以以新的密码登录MySQL了。
管理员还可以锁定MySQL用户的账户,这将阻止用户访问数据库资源,以及为某些安全原因而暂时阻止用户访问MySQL资源。锁定用户账户的操作语句如下:
LOCK ACCOUNT FOR user [@’host_name’] [FOR {NONE | READ | WRITE | ALL}];
在新账户被锁定之后,用户将无法以该数据库帐户登录MySQL服务器,直到管理员取消账户锁定,才能继续使用该账户访问MySQL服务器资源。