Mysql Client链接Mysql Server的认证方式

  参见:http://forge.mysql.com/wiki/MySQL_Internals_ClientServer_Protocol#Password_functions

  我意译一下,大致就是以下内容:

  4.0版本之前

  1、服务器发送随机字符串(scramble_buff)给客户端.

  2、客户端把用户明文密码加密一下,然后将hash加上服务器的随机字符串加密一下变成新的scramble_buff。(参见sql/password.c:scramble()).

  3、客户端将加密后的scramble_buff值发给服务端.

  4、服务器将mysql.user.Password的值加上原始随机字符串进行加密.

  5、服务器比对加密后的hash值和服务端送过来的加密后的scramble_buff.

  6、如果一样,则验证成功.

  基本就是一个挑战机制。但是注意一点:实质上真正意义上的密码是明文密码的加密hash值; 如果有人知道了这个用户的mysql.user.Password(而不用知道原始明文密码)他就能直接登录服务端.

  4.1以后版本

  4.1以后数据库保存的密码是用SHA1加密的:SHA1(SHA1(password))

  1、服务器发送随机字符串(scramble)给客户端.

  2、客户端作如下计算:

  stage1_hash = SHA1(明文密码).

  token = SHA1(scramble + SHA1(stage1_hash)) XOR stage1_hash

  3、客户端将token发送给服务端

  4、服务端作如下计算:

  stage1_hash = token XOR SHA1(scramble + mysql.user.Password)

  5、服务端比对SHA1(stage1_hash)和mysql.user.Password,如果匹配,则认证正确。

  注意:SHA1(A+B)意思是SHA1(A字符串连接B字符串).

  这次没上一个版本的缺陷了. 有了mysql.user.Password和scramble也不能获得token。因为他没法获得stage1_hash。

  但是如果这人有这用户的 mysql.user.Password 及网络上截取的一次完整验证数据, 他也能根据这次截获的token和scramble反解出stage1_hash的值。而由于stage1_hash是不变的,因此下次连接,他获取了新的scramble后,自己加密一下token,送给服务端也能通过验证而连接到服务器.

  最后放一个5.1的认证的抓包结果,注意标红的地方:

  server > 127.0.0.1.49130: Handshake

  127.0.0.1.49130 > server: Handshake (new auth)

  


  1. server > 127.0.0.1.49130: Handshake <proto 10 ver 5.1.41-3ubuntu12.6 thd 55 scramble 1EGu9\Aq8_UnI_'@L<*Y >   
  2. 127.0.0.1.49130 > server: Handshake (new auth) <user root db (null) token 6d2c7025c412b997788525b19a5167c89dafcbe max pkt 16777216>   
  3. server > 127.0.0.1.49130: OK <fields 0 affected rows 0 insert id 0 warnings 0>   

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索客户端
, 字符串
, 加密
, sha1
, hash
, token认证
, password
, mysql抓包
, hash加密
, 获取字符串hash值
sha1加密
mysql server和client、mysql server client、sqlserver 链接mysql、sql server 链接mysql、client server,以便于您获取更多的相关知识。

时间: 2024-11-16 02:28:07

Mysql Client链接Mysql Server的认证方式的相关文章

使用MySQL Proxy解决MySQL主从同步延迟

  MySQL的主从同步机制非常方便的解决了高并发读的应用需求,给Web方 面开发带来了极大的便利.但这种方式有个比较大的缺陷在于MySQL的同步机制是依赖Slave主动向Master发请求来获取数据的,而且由于服务器负 载.网络拥堵等方面的原因,Master与Slave之间的数据同步延迟是完全没有保证的.短在1秒内,长则几秒.几十秒甚至更长都有可能. 由于数据延迟问题的存在,当应用程序在Master上进行数据更新,然后又立刻需要从数据库中读取数据时,这时候如果应用程序从Slave上取数据(这也

关于SQL Server链接MySQL的几个实例

通过程序访问多数据库的时候进行了SQLServer链接MySQL数据的实践,现总结如下: 一.  安装mysql-connector-odbc驱动: 1. 在SQL Server服务器的机器上安装mysql-connector-odbc驱动:  其64位下载地址为:  http://pan.baidu.com/s/1gdq9WyB     在安装过程中可能会报   的错误,只需要安装Microsoft Visual C++ 2010 Redistributable Package即可  其64位

Tomcat通过JNDI方式链接MySql数据库

原文:Tomcat通过JNDI方式链接MySql数据库 拷贝MySQL的JDBC驱动到Tomcat的lib路径下 配置全局数据源或者单个Web应用的局部数据源 局部数据源 在Tomcat的conf/Catalina/localhost下的 app.xml中添加 <Context path="/test" docBase="test" debug="5" reloadable="true"> <Resource

pdo-[求助]关于PHP 链接 Mysql 底层 对于IP 和 Hostname 的处理方式?

问题描述 [求助]关于PHP 链接 Mysql 底层 对于IP 和 Hostname 的处理方式? 使用PHP5.5 PDO 分别 用 域名 和 IP 链接mysql 数据库 出现了性能差异. 找不到 根本原因和解决方案. 使用mysql_connect mysqli_connect 基本上 和 使用PDO 差异不大. 相同的 Mysql 是用.NET和JAVA 进行 相同数据库环境测试 但是得出的结论是 IP 与 Hostname 差异并不大. 有一个方法 gethostbyname 进行 域

Mysql 5.7.19三种安装方式手册

Mysql 5.7.19三种安装方式手册 ** 环境准备 操作系统:CentOS 软件:MySQL-5.7.19 ** ** 一.RPM 方式安装 进入官方网站:https://www.mysql.com 注册账号 downloads 选择MySQL Community Edition (GPL)>>Community (GPL) Downloads >>MySQL Community Server (GPL)>>download 操作系统:Red Hat Enterp

Mysql 查看端口号的几种方式

链接: http://blog.itpub.net/blog/post/id/1592460/ 标题: MySQL 查看端口的几种方式 作者:lōττéry版权所有[文章允许转载,但必须以链接方式注明源地址,否则追究法律责任.] 注释:    今天通过"Navicat for MySQL"工具链接生产环境数据库时,需要输入 mysql"端口"号,所以找到了几种 查看mysql端口的方法,特此整理下提供参考.   默认端口 3306:    OS层 ***** ps

使用Pureftpd+MySQL+Pureftpd_php_manager架设FTP SERVER

前些日子都想写的﹐但由于忙着安装新SERVER﹐一直想着弄完成后可以把其中的过程写出来.现在新SERVER也上架了﹐有时间慢慢写几篇文章出来了﹐*^_^* 本文是傻瓜式的教程﹐目的就是让初学FREEBSD的朋友可以一步一步做下去﹐就建立了自己的FTP SERVER了.其中过程可能有一些罗嗦,有水平的朋友可以跳着看即可,谢谢!如果你是第一次使用pureftpd,可以按步就班的做,对你理清整个安装过程及思路有帮助的,Thanks all.关于pureftpd的介绍﹐建议大家去它的官方站看看﹐我觉得它

使用Microsoft OLE DB Provider For ODBC链接MySQL

ODBC(http://www.aliyun.com/zixun/aggregation/13722.html">Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口).这些API利用SQL来完成其大部分任务.ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语

mysql远程链接问题

问题描述 描述如下:mysql server 存在linux虚拟机上(vm 运行在win7上),mysql client(我用的是toad for mysql)运行在win7上.linux vm ip是192.168.107.128,已经开通3306端口.也就说应该能远程访问mysql server.并且已经做过授权脚本如下:grant all privileges on *.* to root@'192.168.1.%' identified by "777"; client所在wi