MySQL用户登录过程验证详解
2,138 total views, 1 views today
MySQL用户登陆验证过程:
1、MySQL server将user表读入到内存中,然后排序,排序原则下面会讲
2、客户端尝试连接MySQL服务器,服务器扫描内存中排序过后的user表的条目
3、MySQL服务器采纳第一行匹配的客户端名和用户名,然后验证通过
MySQL服务器内存中user表排序原则:
1、最具象(most-specific)的条目放在最前面。
2、user表的host列,文本主机名(Literal host names)和IP地址是最具象的。子网掩码的方式,如192.168.1.0/255.255.255.0的具象程度等同于192.168.1.13,都是最具象的;子网掩码192.168.1.0/255.255.255.0的具象程度高于192.168.1.%。’%’是最不具象的,优先级排在后面;空字符串”意思是any host,具象级别排在’%’之后。
3、host值相同,最具象的值排在最前面;user值为空,以为着any user,是最不具象的。
总结:
1、user表中的host和user列按照具象程度排序加载到内存中,最具象的排在最前面。
2、host具象程度相同时,再去按照user的具象程度从高到底匹配;若没有匹配上,那么转移到次具象的host继续匹配,直至匹配上为止;若没有匹配上,那么登录验证宣告失败。
案例:
测试环境中,三台主机组成Master slave集群,gp-s2是master,gp-s1和gp-s3是slave,并且这三台服务器都在同一个网段。
gp-s2 Master上的user表如下,rep1用户允许 10.9.15.% 这个网段都访问gp-s2。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
+-------------------------+-------+ | host | user | +-------------------------+-------+ | % | root | | % | test3 | | 10.9.15.% | rep1 | | 10.9.15.% | test | | 10.9.15.% | test2 | | 10.9.15.0/255.255.255.0 | wang | | 10.9.15.18 | root | | 127.0.0.1 | root | | ::1 | root | | gp-master | root | | gp-s1 | | | gp-s1 | root | | gp-s1 | test | | gp-s3 | test | | localhost | | | localhost | root | +-------------------------+-------+ 16 rows in set (0.00 sec) |