无法通过程序连接MySQL:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)

  遇到这个报错,一般人反应就是:用户名或密码错误、用户无权限、该 ip 无权限登陆数据库。百度几乎全是这种答案。什么用户名密码后面带了空格啊,什么直接把所有权限给当前用户啊这样的。但是今天我弄了一早上,找了几十个相关讨论,都不行。
  后来发现了一篇文章说:root 用户默认是没有远程登陆权限的,默认只有 localhost 和 127.0.0.1 的所有权限。那么问题来了,我就是用的 root 用户在 localhost IP 登陆的数据库啊,为什么还是这么报错?更奇葩的情况是:

  1. 我有两个数据库 A 和 B。A 和 B 所有语句都是一样的。我把语句写在文件里,只是把数据库名改了下然后复用的;
  2. 我的 Navicat 能连接 A,但连不上 B。连 B 报错:Access denied for user ‘root’@‘localhost’ (using password: YES);
  3. 我的程序则相反,连不上 A,但能连接 B......连 A 报错:Access denied for user ‘root’@‘localhost’ (using password: YES);
  4. 也许是 Navicat 和程序不能同时连接同一个数据库?No. 绝对可以同时连,过去我也是这么边改程序边用 Navicat 看数据的;
  5. 也许我用户名密码错了?No. Navicat 和程序用的同一个用户名密码,复制过去的。我也确认程序里用户名密码前后左右绝对没有空格;
  6. 也许我的 root 真的没有 localhost 的远程登录权限?No. 权限已经给满了,直接 grant all privileges on *.* to 'root'@'localhost';了,而且要是真没有权限,那么 Navicat 和程序应该同时连不上 A 和 B;

  那么最后我怎么解决的呢?在 A 和 B 中分别新建了一个用户,然后给他在 localhost IP 下某个库的所有权限。然后 Navicat 和程序都能通过这个用户正常连接了......我还是不清楚为什么用 root 用户会出现这种问题。我只知道新建用户然后授权可以解决。
  也许有人会觉得这不是废话吗?我只是想提示被这个问题困扰的程序员们,赶紧新建个用户先用着吧!别纠结了,现在都凌晨两点了!附上建用户的SQL吧,免得费事搜:

create user 'userName'@'hostIP' identified by 'password';
grant all privileges on `databaseName`.* to 'userName'@'hostIP';
flush privileges;
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值