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

Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。

程序员文章站 2022-03-08 15:56:59
...

这99元的服务器你们也不放过?
Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。

起因

事情就很秃然,我的navicat秃然就连接不上mysql了
Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。

解决办法

我首先排查了一下,因为我用的docker起的MySQL服务,所以我先进容器中看一下能不能连接上
1. 进入容器内部

docker exec -it cc31c4344417 bash

Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。

2. 通过命令行连接MySQL

mysql -uroot -p

或者

mysql -u root -p

然后输入密码进入到mysql

Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。
从上图可以看到是能正常通过root用户连接到mysql的。

那么问题究竟出在了哪里呢?命令行都可以连接上,为什么navicat就不行呢?

用户使用密码访问时被拒绝,但是这个IP也不是我的服务器IP啊?

此时我是一个脑袋三个大!
Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。
3. 接着我继续排查,看看问题到底出在了哪里!

Show databases;
use daxiang;
show tables;

Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。
咦!我的业务表呢!!

此时我故作淡定,其实内心慌得一批,我用颤抖的手,打开了这张WARNING表

Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。
Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。

看到这里,我慌了,这业务表都被清了,还让我给他打钱?很明显,我也被勒索了。

不过大家都知道,我穷鬼一个,自然是不可能出钱的,所以只能找解决办法。

既然你说我通过aaa@qq.com用密码访问不了,那么我就先给你授权。

如何给用户授权

mysql> grant 权限1,权限2, … 权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;

权限1,权限2,… 权限n 代表 select、insert、update、delete、create、drop、index、alter、grant、references、reload、shutdown、process、file 等14个权限。

这里面就相当于平时运维给测试开的可能只有增,改,查的权限,可以通过该方法给不同的用户授权。

  1. 当 数据库名称.表名称 被 * .* 代替时,表示赋予用户操作服务器上所有数据库所有表的权限
  2. 用户地址可以是localhost,也可以是IP地址、机器名和域名。也可以用 ‘%’ 表示从任何地址连接
  3. ‘连接口令’ 不能为空,否则创建失败

举几个例子:

  • mysql> grant select,insert,update,delete,create,drop on daxiang.warning to aaa@qq.com identified by ‘123456′;

给来自106.54.20.23的用户coffee分配可对数据库daxiang的warning表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123456。

  • mysql> grant all privileges on vtdc.* to aaa@qq.com identified by ‘123456′;
    给来自106.54.20.23的用户coffee分配可对数据库vtdc所有表进行所有操作的权限,并设定口令为123456。

  • mysql> grant all privileges on * .* to aaa@qq.com by ‘123456′;
    给来自106.54.20.23的用户coffee分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123456。

  • mysql> grant all privileges on * .* to aaa@qq.com identified by ‘123456′;
    给本机用户coffee分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123456。

解决问题

他提示什么,你就给对应的用户加上权限

grant all privileges on *.* to aaa@qq.com identified by '123456';

然后通过下面的命令来刷新MySQL的系统权限相关表,否则会出现拒绝访问,还有一种方法,就是重新启动mysql服务器,来使新设置生效。­

flush privileges;

刷新之后,我们来看一下结果,ojbk了,由此可见,网络安全是多么重要的一点。

Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。

最后

Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。