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

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

在使用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 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。