You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MariaDB已授权boto@%访问test_db但本地登录报1045访问被拒绝如何排查

问题根因
  1. 主机通配符%的匹配规则限制:MariaDB/MySQL 中%仅匹配所有通过TCP/IP协议发起的远程/本地连接,不覆盖通过Unix套接字(Unix Socket)发起的本地连接。本地套接字连接需要单独匹配host字段为localhost的账号,你当前仅创建了boto@%,未创建boto@localhost,默认执行mysql命令不指定连接协议时会走本地套接字,因此触发访问拒绝。
    你登录后查询的user()返回boto@localhost、current_user()返回boto@%的现象,也印证了服务端识别到的连接来源是localhost,但因为没有对应localhost的账号,才降级匹配到了%的账号,符合MariaDB的用户匹配规则。
  2. 授权语句潜在语法问题:你提供的授权语句中使用了中文全角单引号’,若实际执行时也使用了全角引号,会导致授权规则未正确生效,权限校验不通过。
  3. 用户匹配优先级问题:MariaDB的用户匹配规则是优先匹配精度更高的host值,localhost的优先级远高于%,如果系统中存在匿名空用户''@localhost,本地登录boto账号时会优先匹配到匿名用户,密码不匹配就会报错。
排查步骤
  • 验证TCP连接是否正常:执行命令 mysql -u boto -p test_db -h 127.0.0.1 --protocol=tcp,如果可以正常登录,即可确认是本地套接字匹配规则导致的问题。
  • 校验授权语法与权限:重新执行英文半角引号的授权语句,刷新权限后再次尝试登录:
GRANT ALL PRIVILEGES ON test_db.* TO 'boto'@'%' IDENTIFIED BY '你的实际密码';
FLUSH PRIVILEGES;
  • 排查匿名用户:执行以下命令确认是否存在匿名用户,若存在则删除后重试:
SELECT User,Host FROM mysql.user WHERE User = '';
-- 如果返回结果有''@localhost,执行删除
DROP USER ''@localhost;
FLUSH PRIVILEGES;
解决方案

如果需要支持默认的本地套接字登录,直接创建对应localhost的账号并授权即可:

CREATE USER 'boto'@'localhost' IDENTIFIED BY '你的实际密码';
GRANT ALL PRIVILEGES ON test_db.* TO 'boto'@'localhost';
FLUSH PRIVILEGES;

如果不需要多维护一套账号,每次本地登录时指定走TCP协议即可:
mysql -u boto -p test_db -h 127.0.0.1 --protocol=tcp

内容的提问来源于stack exchange,提问作者Inksis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 14:57:01