免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4070 | 回复: 4
打印 上一主题 下一主题

MYSQL中host名 127.0.0.1和localhost的小陷阱 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-05-20 11:49 |只看该作者 |倒序浏览
昨天晚上重装了下虚拟机,遇到点mysql账号相关的麻烦事,纠结了一晚上,早上起来,终于解决了。

我一般都是ssh到虚拟机上,直接用控制台对mysql进行日常管理的,这里就会用到host名为localhost的www用户,为了方便,是没有进行密码设置的,密码为空。

而我的应用程序呢,一般是用的127.0.0.1这个host下的www用户,密码不为空。

Mysql代码  
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| localhost | www  |                                           |
| 127.0.0.1 | www  | *password                                 |
+-----------+------+-------------------------------------------+


这时便出现了一个比较怪的问题:

当我以127.0.0.1这个host进行mysql登录的时候,不管是ssh控制台

mysql -h 127.0.0.1 -u www -p

还是用rails 应用程序连接,均报以下错误:

Mysql::Error: Access denied for user 'www'@'localhost' (using password: YES)

怎么回事呢?为什么会把我的127.0.0.1这个host解析成localhost呢?

明明我指定用127.0.0.1这个host登录,Mysql为什么偏要给我换成localhost呢

仔细看看上面那个mysql.user这个表,你就会发现。

同样是www用户,host为localhost的数据行在host为127.0.0.1的这条数据行的前面。

当mysql解析这个127.0.0.1的时候,他会把他当成localhost来使。所以就找到了第一行,不带密码的www@localhost,马上就进行认证,看密码符不符合,来确认是否进行连接。

不知道这个算不算mysql的事,当连接数据库进行认证的时候,他会从上至下遍历,找到第一条满足条件的host和user数据,然后返回进行密码校验。

www@localhost这条数据在www@127.0.0.1这条数据之上,所以不管你来的是localhost,还是127.0.0.1, mysql都将用第一条无密码的www@localhost去进行密码校验。

交换一下顺序就OK了

Mysql代码  
mysql> select host,user,password from user;
+-----------+------+-------------------------------------------+
| host      | user | password                                  |
+-----------+------+-------------------------------------------+
| 127.0.0.1 | www  | *password                                 |
| localhost | www  |                                           |
+-----------+------+-------------------------------------------+


以上仅是个人观点,如有不正确的地方,请指正。

评分

参与人数 1可用积分 +6 收起 理由
Coolriver + 6 支持经历分享

查看全部评分

论坛徽章:
0
2 [报告]
发表于 2011-05-20 15:33 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2011-05-20 15:33 |只看该作者

论坛徽章:
0
4 [报告]
发表于 2011-05-23 10:39 |只看该作者
交换一下顺序就OK了  --- 这个顺序无论你自己怎么交换,内部使用的顺序都是一定的.

论坛徽章:
0
5 [报告]
发表于 2011-05-29 15:08 |只看该作者
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP