连接远程数据库失败Access denied for user ‘root‘@‘xxx.xxx.xx.xxx‘

本文解决Win10系统下远程访问MySQL数据库权限错误问题,通过调整远程服务器上的MySQL权限,包括创建用户、授权及刷新权限,适用于MySQL8.0及之前的版本。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

win10系统,连接远程数据库报错:Access denied for user 'root'@'xxx.xxx.xx.xxx'

代码都写完了,眼看着就要成功了,居然给我看这个???表示心塞…不过还好,在网上查了一会,最后成功解决了这个问题。

首先,在远程服务器上登录mysql:mysql -uroot -p

然后,输入命令:GRANT ALL PRIVILEGES ON *.* TO 'root'@'xxx.xxx.xx.xxx' IDENTIFIED BY 'woshimima' WITH GRANT OPTION;
此处需要强行解释一波… GRANT 权限 on 数据库名.表名 用户名@登录主机 identified by '用户密码';
ALL PRIVILEGES表示赋给远程登录用户所有权限,*代表全部数据库/表,此处root表示要授权的用户,@后面跟具体IP表示只允许该IP访问,跟 % 表示所有IP都可以访问,最后就是在IDENTIFIED BY后面设置登录的密码。(在连接远程数据库时,需要输入上面设置的用户名和密码)

最后,再输入一条命令:FLUSH PRIVILEGES;(大概是更新权限库吧…)

说实话具体的也不太懂,但是暂时是解决问题了,有时间的话我会好好研究的…

决定附上2个链接帮助大家理解一下,感谢这两位博主大哥…
详细参数讲解:https://www.cnblogs.com/gaogaoxingxing/p/6073699.html
举一反三型:https://www.cnblogs.com/jiyang2008/p/9016214.html

================================ 华丽分割线 ==================================
2021.11.17补充:
MySQL8.0不支持grant all privileges on *.* to 'user'@'%' identified by 'woshimima'这种写法。
可以先创建User:create user 'user'@'xxx.xxx.xx.xxx' identified by 'woshimima'';
再授权:grant all privileges on *.* to 'user'@'xxx.xxx.xx.xxx'; (授权完了甚至可以调用上面的flush命令?)
最后还可以删除(如果有需要的话):drop user 'user'@'xxx.xxx.xx.xxx';

<think>好的,我需要解决用户提到的MySQL root用户远程连接权限被拒绝的问题。用户希望给root用户远程访问的权限,但遇到了问题。现在我要根据提供的引用信息来整理解决方案。 首先,用户提到他们已经参考了站内的几个引用,其中引用[1]到[4]都与MySQL用户权限设置有关。我需要确保步骤正确且符合MySQL的版本,尤其是考虑到MySQL 8.0之后的一些变化,比如身份验证插件的改变。 步骤一:使用root用户登录MySQL。这是必须的,因为只有拥有足够权限的用户才能进行用户管理操作。引用[1]中提到要先使用root用户登录后才能执行后续操作,所以这一步是基础。 步骤二:检查现有root用户的权限。用户需要确认root用户的主机设置是否正确。在mysql.user表中,host字段决定了用户可以从哪个主机连接。如果root用户的host是localhost,那么只能本地连接。引用[1]中的查询语句可以查看当前用户的权限,包括host、user以及权限信息。 步骤三:创建或修改root用户的远程访问权限。这里有两种情况:如果root用户已经存在对应远程主机的记录,可以直接修改;否则可能需要创建新的用户或更新host字段。不过通常不建议直接允许root远程访问,但用户明确要求了。引用[4]中的GRANT语句可以用来赋予权限,但需要注意MySQL 8.0之后GRANT语句的行为变化,可能需要先创建用户再授权。引用[2]提到了ALTER USER来修改密码和身份验证插件,特别是如果遇到密码加密方式的问题,比如caching_sha2_password导致连接错误,需要改为mysql_native_password。 步骤四:刷新权限。每次修改权限后,必须执行FLUSH PRIVILEGES;来使更改生效。这是标准操作,确保MySQL服务器重新加载权限表。 步骤五:验证连接。用户需要从远程机器尝试连接,使用mysql -u root -p -h 服务器IP。如果仍然失败,可能需要检查防火墙设置、MySQL绑定地址是否监听所有接口(bind-address=0.0.0.0),以及SELinux等安全设置。 此外,引用[3]提到删除用户的语句,但这里可能不需要,除非存在冲突的用户记录。如果用户之前有尝试创建其他用户导致问题,可能需要清理,但当前问题主要针对root用户。 需要注意的是,直接允许root用户远程访问存在安全风险,最佳实践是创建具有必要权限的独立用户,并限制访问IP。但根据用户需求,这里还是提供针对root的解决方案。 总结步骤应该是:登录,检查用户权限,修改或创建用户权限,更改身份验证插件(如有必要),刷新权限,最后测试连接并处理可能的网络或配置问题。</think>### MySQL root用户远程访问权限配置步骤 #### 步骤1:使用root用户登录MySQL ```bash mysql -u root -p ``` #### 步骤2:检查当前root用户权限 ```sql SELECT host, user, Grant_priv, Super_priv FROM mysql.user WHERE user='root'; ``` - 若host字段值为`localhost`,则仅允许本地连接[^1] #### 步骤3:赋予root用户远程访问权限 **方法1:修改现有root用户权限(推荐MySQL 5.x)** ```sql UPDATE mysql.user SET host='%' WHERE user='root'; FLUSH PRIVILEGES; ``` **方法2:创建新root用户(MySQL 8.x适用)** ```sql CREATE USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY 'YourPassword'; GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' WITH GRANT OPTION; FLUSH PRIVILEGES; ``` - MySQL 8.x需显式指定身份验证插件`mysql_native_password`[^2] **方法3:直接授权(兼容多版本)** ```sql GRANT ALL PRIVILEGES ON *.* TO 'root'@'特定IP' IDENTIFIED BY 'YourPassword'; FLUSH PRIVILEGES; ``` - 示例:`GRANT ALL ON *.* TO 'root'@'192.168.1.100'`[^4] #### 步骤4:验证配置 ```sql SELECT host, user FROM mysql.user WHERE user='root'; ``` - 确认出现`%`或具体IP的记录 #### 步骤5:修改配置文件(可选) ```ini # /etc/mysql/mysql.conf.d/mysqld.cnf bind-address = 0.0.0.0 ``` - 重启MySQL服务生效 #### 步骤6:测试远程连接 ```bash mysql -u root -h [服务器IP] -p ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值