Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2803043
  • 博文数量: 389
  • 博客积分: 4177
  • 博客等级: 上校
  • 技术积分: 4773
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-16 23:29
文章分类

全部博文(389)

分类: Mysql/postgreSQL

2014-04-03 21:30:32

                                MySQL认证用户的顺序

     mysql的用户认证和其他的数据库一个很大的不同就是msyql数据库用户可以分为两部分
一部分是用户名,一部分是主机名.如,'root'@'192.168.10.150',对于后面的ip地址如果有
多个值可选的话,这时候谁最先匹配就成了最重要的.

     当mysql客户端在连接mysql服务器的时候,mysql最先检查主机部分,即使后续有更加宽松
的限制,同时也满足的话,mysql也不会再去做匹配.由于mysql的这种匹配规则顺序,经常使得用户
明明查看到有相应的用户和主机也无法连接上.

比如当前的用户情况.

mysql> select user,host from mysql.user;
+-------+---------------+
| user  | host          |
+-------+---------------+
| frank | %             |
| rep   | %             |
| root  | %             |
| ggs   | 127.0.0.1     |
| root  | 192.168.10.150 |
| root  | ::1           |
| root  | localhost     |
+-------+---------------+
7 rows in set (0.00 sec)

的密码是root,'root'@'192.168.10.150'的密码是abc;

我们在192.168.10.150的机器上登录,用abc密码可以登录成功

[root@c12 ~]# mysql -u root -pabc -s -h  192.168.10.145
mysql>

再试一下用root密码登录
[root@c12 ~]# mysql -u root -proot -s -h  192.168.10.145
ERROR 1045 (28000): Access denied for user (using password: YES)

登录报错.通过测试我们发现通过mysql.user的host进行desc排序,这个顺序就是mysql匹配主机字符串的顺序

mysql> select user,host from mysql.user order by host desc;
+-------+---------------+
| user  | host          |
+-------+---------------+
| root  | localhost     |
| root  | ::1           |
| root  | 192.168.10.150 |
| ggs   | 127.0.0.1     |
| root  | %             |
| rep   | %             |
| frank | %             |
+-------+---------------+
7 rows in set (0.00 sec)

可以看出host从上往下依次匹配的顺序,先是主机,最后是%号.

同时通过上以测试我们发现在第一个主机匹配成功后,后续即使密码相同,mysql也不去匹配了.

[root@c12 ~]# mysql -u root -proot -s -h  192.168.10.145

这条连接请求,也符合倒数第三个主机和用户名对,但是当主机第一条192.168.10.150已经匹配成功了,但密码不一致,
导致失败,mysql拒绝用户的连接请求.


 

阅读(2098) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~