通过MySQL Workbench连接VM中MySQL服务器遇权限拒绝错误求助
解决MySQL Workbench连接虚拟机MySQL报Access denied的问题
问题现象
通过MySQL Workbench连接虚拟机中的MySQL服务器,测试连接时出现错误:
Access denied for user 'user'@'localhost' (using password: YES)
已尝试操作
- 重建用户并授予权限,执行刷新操作,命令如下:
CREATE USER 'username'@'homeIP' IDENTIFIED WITH mysql_native_password BY 'password'; GRANT ALL ON database_name.* TO 'username'@'%'; - 在Windows系统中配置MySQL环境变量
- my.cnf仅添加了
max_allowed_packet配置 - 添加
skip-grant-tables配置后完全无法连接 - 确认输入的密码无误
- 执行
SELECT user, host FROM mysql.users;显示预期的用户名和IP - 执行
SHOW GRANTS FOR 'username'@'homeIP';显示已授予全部权限
解决方案
修正Workbench连接配置
错误提示中的'user'@'localhost'说明你可能在Workbench里把主机名填成了localhost,这会连接本地Windows的MySQL而非虚拟机的。请将主机名改为虚拟机的IP地址,端口保持默认3306,用户名填你创建的username。统一用户与权限的主机匹配
你创建的用户是'username'@'homeIP',但授权给了'username'@'%',两者的主机范围不一致,可能导致权限不生效。二选一调整:- 改为创建允许任意IP连接的用户:
CREATE USER 'username'@'%' IDENTIFIED WITH mysql_native_password BY 'password'; GRANT ALL ON database_name.* TO 'username'@'%'; FLUSH PRIVILEGES; - 或者确保你的Windows客户端IP就是
homeIP,并给该用户授权:GRANT ALL ON database_name.* TO 'username'@'homeIP'; FLUSH PRIVILEGES;
注意必须执行
FLUSH PRIVILEGES;让权限立即生效。- 改为创建允许任意IP连接的用户:
检查MySQL的绑定地址配置
编辑虚拟机的my.cnf(或my.ini)文件,找到bind-address配置项:- 如果是
bind-address = 127.0.0.1,说明MySQL只允许本地访问,需改为bind-address = 0.0.0.0(允许所有IP访问)或虚拟机的专属IP。 - 修改后重启MySQL服务。
- 如果是
检查虚拟机防火墙与网络
- 确保虚拟机的防火墙开放了3306端口(Linux用
ufw allow 3306或firewall-cmd --permanent --add-port=3306/tcp,之后重启防火墙)。 - 确认虚拟机的网络模式为桥接模式,保证Windows主机能ping通虚拟机IP。
- 确保虚拟机的防火墙开放了3306端口(Linux用
移除
skip-grant-tables配置
该配置会绕过权限验证,可能导致连接异常,直接从my.cnf中删除这一行,重启MySQL服务即可恢复正常权限校验。
内容的提问来源于stack exchange,提问作者beatmaister
相关产品推荐
相关产品推荐

