Mysql用户登陆验证过程 & 案例

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。

+-------------------------+-------+

| 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)

使用rep1用户在gp-s1上无法登录gp-s2

[root@gp-s1 ~]# mysql -urep1 -p123456 -h gp-s2

ERROR 1045 (28000): Access denied for user 'rep1'@'gp-s1' (using password: YES)

使用rep1用户在gp-s2上能够登录gp-s2

[root@gp-s3 ~]#  mysql -urep1 -p123456 -h gp-s2

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 17

Server version: 5.5.48-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

这是一个很奇怪的问题,相同用户、在相同网段,gp-s1可以登录,gp-s3不可以登录。

试着在master上给rep1用户加上新权限

mysql> grant replication slave on *.* to 'rep1'@'10.9.15.19' identified by "123456";

这次在gp-s1主机上登录master可以顺利登录,但是走的条目是'10.9.15.19',而不是'10.9.15.%'

[root@gp-s1 ~]# mysql -urep1 -p123456 -h gp-s2

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 34

Server version: 5.5.48-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql>

mysql>

mysql> select user(),current_user();

+------------+-----------------+

| user()     | current_user()  |

+------------+-----------------+

| rep1@gp-s1 |rep1@10.9.15.19 |

+------------+-----------------+

1 row in set (0.00 sec)

gp-s3登录则是走的正常条目'10.9.15.%'

[root@gp-s3 ~]# mysql -urep1 -p123456 -h gp-s2

Welcome to the MySQL monitor.  Commands end with ; or \g.

Your MySQL connection id is 35

Server version: 5.5.48-log MySQL Community Server (GPL)

Copyright (c) 2000, 2016, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its

affiliates. Other names may be trademarks of their respective

owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> select user(),current_user();

+----------------+----------------+

| user()         | current_user() |

+----------------+----------------+

| rep1@10.9.15.2 | rep1@10.9.15.% |

+----------------+----------------+

1 row in set (0.00 sec)

这说明gp-s1到gp-s2网络是没有问题的。

采用排错法,gp-s3正常,那么比对gp-s1和gp-s3在user表中的区别,最后找到了根源。

+-------------------------+----------+-------------------------------------------+

| host                    | user     | password                                  |

+-------------------------+----------+-------------------------------------------+

| %                       | root     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| %                       | test3    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 10.9.15.%               | rep1     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 10.9.15.%               | test     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 10.9.15.%               | test2    | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 10.9.15.%               | wchbsync | *55D02D8B1D286B078AC8DC9CD05E2D5D80906F3F |

| 10.9.15.0/255.255.255.0 | wang     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 10.9.15.18              | root     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 10.9.15.19              | rep1     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 10.9.15.19              | rep2     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| 127.0.0.1               | root     |                                           |

| ::1                     | root     |                                           |

| gp-master               | root     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| gp-s1                   |          |                                           |    问题出在这里

| gp-s1                   | root     |                                           |

| gp-s1                   | test     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| gp-s3                   | test     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

| localhost               |          |                                           |

| localhost               | root     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

+-------------------------+----------+-------------------------------------------+

将这一行删掉,问题解决。

那么为什么会出现这种问题呢??

因为gp-s1登陆gp-s2,首先去匹配host,按照具象程度,这3个条目匹配到。

| gp-s1                   |          |                                           |    问题出在这里

| gp-s1                   | root     |                                           |

| gp-s1                   | test     | *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9 |

匹配到host gp-s1之后,再按照具象程度匹配user,user列没有rep1用户,最后只能匹配空值'',空值意味着any user。对于用户空值并且密码同时为空的情况,意味着无法远程登陆。

**特别说明

如果用户名为空,但是密码不为空的情况。远程用户登录,只要密码正确,无论用户怎么写,都能登录。

这里也要特别注意,对于用户空值的情况,一定要及时删除,避免出现不必要的麻烦!

转载请注明:

十字螺丝钉

http://blog.chinaunix.net/uid/23284114.html

QQ:463725310

E-MAIL:houora#gmail.com(#请自行替换为@)

mysql登陆案例_Mysql用户登陆验证过程 案例相关推荐

  1. 登陆mysql服务器命令_Mysql服务器登陆,启动,停止等基本操作命令介绍(Linux/Centos环境)...

    Mysql服务器登陆,启动,停止等基本操作命令介绍(Linux/Centos环境) 1.  启动MySQL服务 启动MySQL服务的命令为: 命令执行后如图7-5所示,表示启动MySQL服务成功. 也 ...

  2. php错误密码也能登陆账号,php用户登陆代码(限制用户错误登录次数)(1/2

    php用户登陆代码(限制用户错误登录次数)(1/2)php用户登陆代码(限制用户错误登录次数) php教程用户登陆代码(限制用户错误登录次数) session_start(); include(&qu ...

  3. python编程用户登陆c_django实现用户登陆功能详解

    简介: Python下有许多款不同的 Web 框架.Django是重量级选手中最有代表性的一位.许多成功的网站和APP都基于Django. Django是一个开放源代码的Web应用框架,由Python ...

  4. mysql用户名锁定_MySQL用户锁定

    修改方式: set global log_warnings=2; MySQL 5.5版本官方文档中,并没有用户锁的状态.因此不存在用户会被锁.. The account-locking capabil ...

  5. mysql用创建的用户登陆并修改表格_MySQL 基础学习二:创建一个用户表,并增删改查...

    MySQL 基础学习二:创建一个用户表,并 增删改查 提示:MySQL 命令建议都用大写,因为小写运行时,还是翻译成大写的. 第一步,创建一个用户表 1,打开控制台,进入数据库 C:\Users\Ad ...

  6. mysql 远程登陆设置_mysql远程登陆设置

    基于安全考虑root账户一般只能本地访问,但是在开发过程中可能需要打开root的远程访问权限.下面是基本的步骤: 1.登录到mysql中,为root进行远程访问的授权,执行下面的命令: mysql&g ...

  7. 2,史上最全linux的免密登陆和设定用户登陆(RHCE)

    文章目录 1.实现免密登录 2.设置只允许student1, student2用户登录 3.get和post的区别 4.HTTP状态码,常用的状态码有哪些? 5.HTTP请求报文和响应报文 6.HTT ...

  8. mysql语句解析_mysql 语句的查询过程解析

    select * from tb where ID = 1 下面解析的查询过程都是基于上面的简单查询,该系列的所有素材都来自于丁奇的mysql的45讲 1.建立连接 a.客户端发出请求,请求首先到达连 ...

  9. java mysql查询语句_Mysql查询语句执行过程

    Mysql查询语句执行过程 Mysql分为server层和存储引擎两部分,或许可以再加一层连接层 连接层(器) Mysql使用的是典型的C/S架构.连接器通过典型的TCP握手完成连接. 需要注的是, ...

  10. 操纵BGP AS-PATH 属性案例(配图+详细验证过程)

    BGP总是优先选择具有最短AS路径的路由.本案例中,我们将配置R1,将1.0.0.0通告给R2.R3之前预先添加两个额外的AS路径到1.0.0.0上(AS300.AS400) 具体配置如下: r1 i ...

最新文章

  1. mac terminal vim delete key
  2. WinSock网络编程基础(3)server
  3. 一起谈.NET技术,WCF的问题和Using语句块
  4. 远程连接mysql速度慢的解决方法
  5. POJ2279-Mr. Young's Picture Permutations【线性dp】
  6. node-glob 正则表达式
  7. 【算法分析与设计】辗转相除法
  8. Spring线程池开发实战
  9. [linux 日常]修改ls目录的颜色
  10. EasyUI加载树控件自动展开所有目录
  11. 【Computer Organization笔记05】运算器基本功能,定点运算器,Am2901的组成与功能,VHDL硬件描述语言
  12. 计算机教室网络连接示意图,多媒体电教室解决方案
  13. 计算机的排版方法,计算机编辑排版系统及其方法
  14. 51物联卡:物联卡支持5G吗?怎么购买5G物联卡
  15. 《笑傲江湖》清心普善咒——曲谱(琴箫合奏曲)
  16. 工信部教育与考试中心-软件测试工程师考试题A卷-答
  17. mac地址前6位对应vendor
  18. 自媒体视频如何消重?批量处理去重消重去水印去logo软件企鹅号视频不重复必学的消重技巧...
  19. The producer group has been created before
  20. 软件自动化测试项目总结,自动化测试总结报告.docx

热门文章

  1. 最新kali之bulk_extractor
  2. 警惕针对SQL的爆破攻击,入侵者会完全控制服务器,挖矿只是小目标
  3. Elasticsearch实现内容精确匹配查询
  4. [Photography] 测光
  5. erp管理系统软件价格
  6. 用MFC实现WebGUI--(CDHtmlDialog)
  7. 方法调用错误,例如:
  8. Liunx使用apt安装本地deb软件包
  9. NoteExpress基础使用
  10. EasyCaptcha图形验证码工具