Mysql grant all privileges on ...不生效解决方案

时间:2021-08-13 08:49:32

情景:我在mac的终端下用ssh操作虚拟机中的centos,mysql运行在centos中

mysql -u root -p

用root登录mysql后

使用

grant all privileges on db1.* to user1@'%' identified by 'user1' with grant option;

意为:给所有主机登录(%指任意主机)的用户名为user1(密码为user1,identified by后接密码) 授予操作数据库db1下所有数据表(db1.*指db1所有数据表)的所有权限。

此时

select * from mysql.user \G;

发现user1的权限还是N,即上面授予操作无效,为什么呢?

 

原因:

这时在mysql下root登录,执行show grants;显示

grant all privileges on *.* to 'root'@'localhost' xxxxxxxxxxxx

对于本地主机下登录的root用户才有所有权,而这时我是在mac的终端下ssh操作虚拟机中的mysql,这时的root用户当然没有所有权。

解决方法:回到虚拟机中登录mysql的root操作。

在虚拟机mysql中添加:

grant all privileges on *.* to 'root'@'%' identified by 'root的密码' with grant option;

添加后再用

select * mysql.user \G;

发现多了一行,内容是用户为root,主机为%,拥有所有权限。

 

这时就可以回到mac在mysql登录root操作了。

如果这时还不行,可以用以下方法:

在mac中打开mysqlworkbench(需要另外下载),用mysql root用户远程登录虚拟机的mysql。

我这时虚拟机的地址是192.168.20.101(确保虚拟机的防火墙关了或者开启了mysql的端口3306)。

Mysql grant all privileges on ...不生效解决方案

 

登录后在左上角选择Users and Privileges,可以添加用户,并在Administration Roles选卡添加用户权限。

 

Mysql grant all privileges on ...不生效解决方案