Navicat连接mysql时出现 Access denied for user ‘root‘@‘xxx.xxx.xxx.xxx‘ (using password: YES) 的原因及解决办法。
这99元的服务器你们也不放过?
起因
事情就很秃然,我的navicat秃然就连接不上mysql了。
解决办法
我首先排查了一下,因为我用的docker起的MySQL服务,所以我先进容器中看一下能不能连接上
1. 进入容器内部
docker exec -it cc31c4344417 bash
2. 通过命令行连接MySQL
mysql -uroot -p
或者
mysql -u root -p
然后输入密码进入到mysql
从上图可以看到是能正常通过root用户连接到mysql的。
那么问题究竟出在了哪里呢?命令行都可以连接上,为什么navicat就不行呢?
用户使用密码访问时被拒绝,但是这个IP也不是我的服务器IP啊?
此时我是一个脑袋三个大!
3. 接着我继续排查,看看问题到底出在了哪里!
Show databases;
use daxiang;
show tables;
咦!我的业务表呢!!
此时我故作淡定,其实内心慌得一批,我用颤抖的手,打开了这张WARNING表
看到这里,我慌了,这业务表都被清了,还让我给他打钱?很明显,我也被勒索了。
不过大家都知道,我穷鬼一个,自然是不可能出钱的,所以只能找解决办法。
既然你说我通过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个权限。
这里面就相当于平时运维给测试开的可能只有增,改,查的权限,可以通过该方法给不同的用户授权。
- 当 数据库名称.表名称 被 * .* 代替时,表示赋予用户操作服务器上所有数据库所有表的权限
- 用户地址可以是localhost,也可以是IP地址、机器名和域名。也可以用 ‘%’ 表示从任何地址连接
- ‘连接口令’ 不能为空,否则创建失败
举几个例子:
- 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了,由此可见,网络安全是多么重要的一点。