情景:我在mac的终端下用ssh操作虚拟机中的centos,mysql运行在centos中
mysql -u root -p
用root登录mysql后
使用
grant all privileges on db1.* to [email protected]‘%‘ 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)。
登录后在左上角选择Users and Privileges,可以添加用户,并在Administration Roles选卡添加用户权限。