欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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

程序员文章站 2022-07-13 15:20:46
...

  遇到这个报错,一般人反应就是:用户名或密码错误、用户无权限、该 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;
相关标签: 工具使用类

上一篇: 数字颠倒

下一篇: 关于echarts