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

MariaDB从10.1升级到10.9后非root用户远程访问被拒绝

排查步骤

1. 执行mysql_upgrade修复系统表结构

MariaDB跨大版本升级(10.1→10.9)后,必须运行mysql_upgrade更新系统表结构,否则新版本权限校验逻辑无法兼容旧表数据。

  • 本地登录root用户执行:
mysql_upgrade -uroot -p
  • 完成后重启服务:
systemctl restart mariadb

10.1到10.9的mysql.user等系统表新增了password_expired、password_last_changed等字段,旧数据目录的表结构未更新会直接导致权限校验失败,这是此类问题的最常见根源。

2. 重新设置用户密码(更新哈希格式)

MariaDB 10.4+默认使用caching_sha2_password哈希算法,10.1则用mysql_native_password。虽新版本兼容旧算法,但部分场景下旧哈希无法通过校验,重新设置密码可生成适配新版本的哈希:

  • 登录本地root用户执行:
ALTER USER 'username'@'ip' IDENTIFIED BY 'your_password';
-- 若需保留旧算法,可指定:
ALTER USER 'username'@'ip' IDENTIFIED WITH mysql_native_password BY 'your_password';
FLUSH PRIVILEGES;

替换username、ip、your_password为实际信息;若用户允许所有IP访问,将ip替换为%。

3. 检查用户权限条目优先级

确认是否存在更严格的host匹配条目覆盖目标用户:

  • 登录root用户执行:
SELECT user, host FROM mysql.user WHERE user = 'username';

若返回多个条目(如'username'@'192.168.1.100'和'username'@'%'),MariaDB会优先匹配更精确的host。若实际连接IP未匹配到对应精确条目,会触发权限拒绝,此时可删除多余条目或调整对应权限。

4. 验证连接时的用户匹配细节

临时开启通用查询日志,查看连接时的实际用户匹配情况:

  • 登录root用户执行:
SET GLOBAL general_log = 1;

尝试远程连接后,查看日志记录,确认是否是'username'@'ip'被正确识别,而非匹配到其他无效条目。

  • 关闭日志:
SET GLOBAL general_log = 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 19:40:29