昨天在虚拟机上搭建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)如果是已存在的连接,取消授权后,访问数据库中的表,会报错:

 

转载于:https://www.cnblogs.com/Ternura-1023/p/11434947.html

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐