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