MySQL新增用户登录报错Access denied解决方法
在使用MySQL构建OpenStack或类似环境时,若新建的服务账户(如nova、keystone)在使用localhost作为主机名连接时频繁遭遇“Access denied”拒绝访问,通常是由于MySQL保留了默认的匿名账户。
该漏洞会导致匿名账户优先级高于新创建的特定用户,从而拦截认证。只需清理这些空用户名记录并强制刷新权限缓存,即可恢复正常。
问题现象与分析
在安装配置开源云平台(如OpenStack Folsom版本)时,运维人员通常会通过脚本批量创建数据库及对应账号。常见执行逻辑如下:
# 假设 $MYSQL_PASS 为设定的密码变量
mysql -uroot -p$MYSQL_PASS <<EOF
CREATE DATABASE nova;
GRANT ALL PRIVILEGES ON nova.* TO 'nova'@'%' IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE glance;
GRANT ALL PRIVILEGES ON glance.* TO 'glance'@'%' IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE keystone;
GRANT ALL PRIVILEGES ON keystone.* TO 'keystone'@'%' IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE cinder;
GRANT ALL PRIVILEGES ON cinder.* TO 'cinder'@'%' IDENTIFIED BY '$MYSQL_PASS';
CREATE DATABASE quantum;
GRANT ALL PRIVILEGES ON quantum.* TO 'quantum'@'%' IDENTIFIED BY '$MYSQL_PASS';
FLUSH PRIVILEGES;
EOF
虽然上述脚本末尾执行了权限刷新,且允许通配符'%'访问,但当客户端尝试通过本地回环地址localhost进行连接时,MySQL的权限匹配机制会失效。具体报错信息通常为:
root@controller:~# mysql -h localhost -ukeystone -ppassword
ERROR 1045 (28000): Access denied for user 'keystone'@'localhost' (using password: YES)
原因解析
MySQL服务器初始化完成后,mysql.user表中往往包含一个用户名为空的条目(即匿名用户)。根据MySQL的用户匹配规则,当用户使用-h localhost连接时,MySQL会优先匹配user和host字段组合最精确的记录。
由于空字符串对用户名的匹配度极高,且localhost的匹配顺序往往优于带通配符的地址,这导致连接请求被匿名用户接管。而匿名用户通常没有密码或没有对应的操作权限,因此直接返回权限拒绝错误。
操作步骤:清理匿名用户并刷新权限
要彻底解决此问题,需要手动清除这些遗留的空名记录。请在拥有root权限的情况下,按以下顺序执行操作。
第1步:进入系统数据库
目的是切换到存储用户信息的元数据区域,以便直接修改用户表。在终端输入以下命令:
- 入口:
mysql命令行交互界面 - 动作:选择
mysql库
use mysql;
第2步:删除空用户名记录
目的是移除所有用户名字段为空的安全隐患记录,确保新建立的特权账号能正确响应本地连接。请注意检查warnings输出以确认删除范围。
delete from user where user='';
第3步:重载权限表
目的是让MySQL内核重新加载内存中的权限映射关系,使刚才的删除操作立即生效,无需重启数据库服务。
flush privileges;
完成判断与验证
执行完上述步骤后,原报错的服务账号应当可以正常登录。可以通过以下方式确认修复成功:
- 重新发起相同的连接命令(如
mysql -h localhost -u keystone -p)。 - 如果不再提示
ERROR 1045 (28000),而是进入了mysql>命令交互提示符,则说明权限已放开。 - 可进一步输入
show databases;查看是否看到了之前授权的对应数据库列表。
简要总结
MySQL在处理基于主机名的权限时存在一定的历史包袱。对于绝大多数现代开发及生产环境,建议在初始化阶段就清理掉无用的匿名用户,或通过防火墙策略禁止匿名登录,以避免此类混淆。以上就是解决MySQL新增用户无法本地登陆问题的详细内容,更多关于Linux系统数据库维护的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









