龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 数据库类 > MySQL 技术 >

MySQL远程访问设置终极方法(7)

时间:2014-12-03 12:39来源:网络整理 作者:网络 点击:
分享到:
The server uses sorting rules that order rows with the most-specific Host values first. Literal host names and IP addresses are the most specific. (The specificity of a literal IP address is not affec

The server uses sorting rules that order rows with the most-specific Host values first. Literal host names and IP addresses are the most specific. (The specificity of a literal IP address is not affected by whether it has a netmask, so 192.168.1.13 and 192.168.1.0/255.255.255.0 are considered equally specific.) The pattern ‘%' means “any host” and is least specific. The empty string ” also means “any host” but sorts after ‘%'. Rows with the same Host value are ordered with the most-specific User values first (a blank User value means “any user” and is least specific).

请注意这句话:“The server uses sorting rules that order rows with the most-specific Host values first. Literal host names and IP addresses are the most specific.”

那么,当从本地连接到数据库时,匿名用户将覆盖其他如'[any_username]'@'%'之类的用户。具体匹配过程如下:

在'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.退出,然后就可以在本地直接登录数据库了。

②、投机取巧的解决办法,在本地使用跳过权限表认证的登录数据库

刚刚在上面的原因解释中已经说过,虽然登录使用的root帐号,但是被数据库处理成了匿名用户。而登录用的帐号和密码与匿名帐号信息不匹配,才导致权限认证没有通过。那干脆就“不走寻常路”,跳过权限认证这一步,直接登录不就OK了。具体做法类似“忘记密码”的处理方式类似,所以,可以参考下面的 忘记数据库密码 。需要注意的时,这里和“忘记数据库密码”的处理不一样的是,这里不需要这里只需要登录进去,登录进去之后需要删除匿名帐号而不是重置密码。至于删除匿名帐号的方法,请参考上面的介绍,这里就不再赘述。

③、最诡异的解决办法,在本地伪装成远程主机来登录数据库

既然如果不知道IP地址,MySQL会默认认为从本地主机登录。那么,我们就指定一下主机,把自己伪装成远程主机登录。D瓜哥认为这个解决办法从MySQL的认证机制上是说得通的。

首先,使用ifconfig查出本地主机的IP(注意,不是127开头的回环地址)。

然后,使用如下命令登录:

收藏文章
表情删除后不可恢复,是否删除
取消
确定
图片正在上传,请稍后...
评论内容为空!
还没有评论,快来抢沙发吧!
按钮 内容不能为空!
立刻说两句吧! 查看0条评论
精彩图集

赞助商链接