在'root'@'localhost'可以匹配'root'@'%',''也可以匹配root,那么'root'@'localhost'也可以匹配''@'localhost'。根据上面的文档显示,主机(host)有比用户名称user更高的匹配优先级,则localhost比%有比更高的匹配优先级。所以,''@'localhost'比'root'@'%'匹配优先级更高,'root'@'localhost'就匹配到了''@'localhost'。根据我们上面的查询结果来看,''@'localhost'的密码为空,与登录时提供的密码123456不匹配。所以,就登录失败了。
说到这里,想必大家已经想到了解决方案:很简单,直接把匿名用户删掉就可以了。
但是,现在的问题时,在本地根本登录不上数据库,更别扯删除数据了。
怎么办?D瓜哥想到了三个解决办法,方法如下:
①、比较扯淡的解决方法,在另外一台电脑或者虚拟机上,远程连接这个数据库
这是我想到的一个比较扯淡的解决方法。既然我们已经允许了远程连接,那么我们就可以在另外一台电脑或者另外一个虚拟机上,远程连接到这个数据库,然后把删除匿名用户。步骤如下:
1.在远程电脑上连接到该数据库。命令如下:
复制代码 代码如下:
mysql -h192.168.1.119 -uroot -p123456
2.然后,切换到mysql数据库。命令如下:
复制代码 代码如下:
use mysql
3.删除匿名用户。SQL如下:
复制代码 代码如下:
delete from user where user='';
4.退出,然后就可以在本地直接登录数据库了。
②、投机取巧的解决办法,在本地使用跳过权限表认证的登录数据库