昨天在虚拟机上搭建web项目环境时,想在主机上使用navicat访问虚拟机上的mysql数据库,报错大概是“hostxxx is not allowed to this mysql server”;
于是就检查防火墙,是关闭的,检查网络模式,是桥接模式,虚拟机也能和主机ping通。。。emmm那怎么办呢
参看之前项目的安装文档,发现自己遗漏了这么两句配置:
cmd进入mysql,输入:
GRANT ALL PRIVILEGES ON *.* TO 'username'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
(这表示赋予任何主机访问数据的权限,其中*.*表示可以访问mysql server上的任意数据库(全局权限),如果替换成a.*,即表示可以访问mysql server上的a数据库啦(表权限);
其中%可以替换为具体的ip地址,如192.168.12.80,表示赋予该主机访问虚拟机mysql server的权限)
再输入:
FLUSH PRIVILEGES;
(这表示刷新MySQL的系统权限相关表,如果授权之后不加这条命令,上面的授权就无法立即生效,除非重启mysql server)
这里还有一些补充问题,例如:flush privileges这条命令什么情况下需要执行;赋予权限之后如何撤回权限;
在博客园发现了一位大佬总结的相关解释:https://www.cnblogs.com/gaosf/p/11189090.html
实践发现:
1、赋予全局权限后,命令是立即生效的,接下来创建的连接都可以使用新的权限,因此不需要再执行FLUSH PRIVILEGES;
2、取消权限:revoke all privileges on *.* from 'username'@'%';
1)如果是新建的连接,可以看到因权限不足产生的临时库
2)如果是已存在的连接,取消授权后,访问数据库中的表,会报错:
2019/10/8
防火墙未关闭的报错:
暂时的解决办法:
service iptables stop 关闭防火墙,设置后即时生效,重启后会复原
查看防火墙状态 service iptables status
永久的解决方法:
chkconfig iptables off 关闭防火墙,设置后重启生效,重启后不复原