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

MySQL 8.0.26 TCP/IP连接root执行GRANT PROXY报访问拒绝原因咨询

问题概述

通过TCP/IP连接登录MySQL后,即使用root账号也无法执行GRANT PROXY命令;但使用UNIX socket连接MySQL时,可以成功运行该命令。核心疑问是:为何root用户通过TCP/IP连接MySQL时,执行GRANT PROXY会提示"access denied"?

复现步骤
  • 首先启动一个MySQL 8.0.26容器并进入交互Bash shell:
docker run --name testmysqldeleteme --env MYSQL_ROOT_PASSWORD=123 --detach mysql:8.0.26
docker exec -it testmysqldeleteme bash
  • 在交互Bash shell中执行如下命令登录MySQL:
mysql --user root --password=123 --host 127.0.0.1
  • 在MySQL shell中依次执行如下命令:
-- 开启check_proxy_users功能
SET GLOBAL check_proxy_users = 1;

-- 为mysql_native_password认证插件开启代理用户支持
SET GLOBAL mysql_native_password_proxy_users = 1;

-- 安装MySQL no-login插件
INSTALL PLUGIN mysql_no_login SONAME 'mysql_no_login.so';

-- 创建两个测试用户
CREATE USER trevor IDENTIFIED WITH mysql_native_password BY 'Trevor123';
CREATE USER trevor_proxy IDENTIFIED WITH mysql_no_login;

-- 授予代理权限
GRANT PROXY ON trevor_proxy TO trevor;
  • 执行到最后一步时返回报错:
ERROR 1698 (28000): Access denied for user 'root'@'127.0.0.1'
问题原因

核心原因是MySQL中root@localhost和root@127.0.0.1是两个完全独立的用户账号,权限相互隔离:

  1. 使用UNIX socket连接MySQL时,系统默认匹配的是root@localhost账号,该账号在MySQL初始化阶段就被授予了所有最高权限,包括PROXY权限的授予权限,因此可以正常执行GRANT PROXY命令。
  2. 使用TCP/IP指定127.0.0.1连接时,系统匹配的是root@127.0.0.1账号,官方MySQL 8.0的Docker镜像默认不会创建该账号,就算手动创建过该账号,默认也没有分配PROXY相关的授权,因此执行操作时会触发权限不足的报错。
验证方法

登录MySQL后执行以下两条命令,即可确认当前账号的匹配情况和权限:

-- 查看当前登录的用户和实际匹配的账号
SELECT USER(), CURRENT_USER();
-- 查看当前账号的所有权限
SHOW GRANTS FOR CURRENT_USER;

对比两种登录方式的返回结果,就能明确看到两个账号的权限差异。

解决方案
  • 方案1:如果需要使用TCP连接执行相关操作,可以先用UNIX socket登录root@localhost账号,给root@127.0.0.1授予对应权限:
GRANT PROXY ON *.* TO 'root'@'127.0.0.1' WITH GRANT OPTION;
FLUSH PRIVILEGES;

执行完成后,再用TCP连接的root账号就能正常执行GRANT PROXY命令。

  • 方案2:本地操作优先使用UNIX socket登录,执行登录命令时不需要指定host参数,直接运行mysql -uroot -p即可默认走socket连接,匹配权限最高的root@localhost账号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 19:24:02