mysql的用户验证颇有意思,在user表中有user、host两个字段,也就是用户名和主机,mysql按登录用户名和所在客户端地址来匹配登录用户。mysql会对user表先按host排序,%(所有主机)会排在最后,host相同再按user排序,而空串(匿名用户)会排在最后面。
例如user表有以下记录,
host | user |
% | Tom |
192.168.1.100 | |
192.168.1.100 | Lily |
在排序后是这样,
host | user |
192.168.1.100 | Lily |
192.168.1.100 | |
% | Tom |
如果Tom兄在192.168.1.100上登录,那么mysql会把他当匿名用户。
Why?mysql把他与第二行匹配了,这里空串可以匹配任何用户。
更详细内容:http://dev.mysql.com/doc/refman/5.1/zh/database-administration.html