MySQL新增用户登录报错Access denied解决方法

江岸
江岸
发布时间:2026-10-14 | 3人浏览过
原创

在使用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;

完成判断与验证

执行完上述步骤后,原报错的服务账号应当可以正常登录。可以通过以下方式确认修复成功:

  1. 重新发起相同的连接命令(如mysql -h localhost -u keystone -p)。
  2. 如果不再提示ERROR 1045 (28000),而是进入了mysql>命令交互提示符,则说明权限已放开。
  3. 可进一步输入show databases;查看是否看到了之前授权的对应数据库列表。

简要总结

MySQL在处理基于主机名的权限时存在一定的历史包袱。对于绝大多数现代开发及生产环境,建议在初始化阶段就清理掉无用的匿名用户,或通过防火墙策略禁止匿名登录,以避免此类混淆。以上就是解决MySQL新增用户无法本地登陆问题的详细内容,更多关于Linux系统数据库维护的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表