MySQL-Binlog解析篇:2 Authenticate
2019独角兽企业重金招聘Python工程师标准>>>
上一节是收到了欢迎语,下面开始验证阶段。
=================================
首先上代码
@Override
public byte[] toByteArray() throws IOException {
ByteArrayOutputStream buffer = new ByteArrayOutputStream();
int clientCapabilities = this.clientCapabilities;
if (clientCapabilities == 0) {
clientCapabilities = ClientCapabilities.LONG_FLAG |
ClientCapabilities.PROTOCOL_41 | ClientCapabilities.SECURE_CONNECTION;
if (schema != null) {
clientCapabilities |= ClientCapabilities.CONNECT_WITH_DB;
}
}
buffer.writeInteger(clientCapabilities, 4);
buffer.writeInteger(0, 4); // maximum packet length
buffer.writeInteger(collation, 1);
for (int i = 0; i < 23; i++) {
buffer.write(0);
}
buffer.writeZeroTerminatedString(username);
byte[] passwordSHA1 = "".equals(password) ? new byte[0] : passwordCompatibleWithMySQL411(password, salt);
buffer.writeInteger(passwordSHA1.length, 1);
buffer.write(passwordSHA1);
if (schema != null) {
buffer.writeZeroTerminatedString(schema);
}
return buffer.toByteArray();
}
===
具体解释如下:
长度作为3个字节写出,小端模式
然后后面跟1个字节的值,为1或者0,验证命令为1,其它为0.
然后开始写具体的一些内容如下:
clientCapabilities: 4个字节,小端模式
packet最大长度:4个字节,可以为0
collation:占1个字节。
然后写23个0,占23个字节,估计是保留位
用户名,以\0结束。
密码:密码分为2部分,长度先作为一个字节写出去,后面跟具体密码。
空密码为new byte[0].
否则需要做一个函数转换,具体代码如下:
/**
* see mysql/sql/password.c scramble(...)
*/
private static byte[] passwordCompatibleWithMySQL411(String password, String salt) {
MessageDigest sha;
try {
sha = MessageDigest.getInstance("SHA-1");
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
byte[] passwordHash = sha.digest(password.getBytes());
return xor(passwordHash, sha.digest(union(salt.getBytes(), sha.digest(passwordHash))));
}
======至此,发送验证命令完毕,下面开始读取响应。
这部分比较简单
1)3个字节,小端模式,表明长度
2)跳过1个字节的序列号
3)读取对应的值,值的第一个字节为0表示验证成功。0XFF表示错误,其它为未知异常。
这部分简单,不赘述。
转载于:https://my.oschina.net/qiangzigege/blog/540746
MySQL-Binlog解析篇:2 Authenticate相关推荐
- MySQL Binlog 解析工具 Maxwell 详解
maxwell 简介 Maxwell是一个能实时读取MySQL二进制日志binlog,并生成 JSON 格式的消息,作为生产者发送给 Kafka,Kinesis.RabbitMQ.Redis.Goog ...
- log解析工具 px4_详解MySQL Binlog解析工具--binlog2sql,基于表级别的数据恢复
概述 最近碰到某个表需要做数据回退,如果回退整个数据库动作又太大,所以用了binlog2sql来实现,这里先介绍一下binlog2sql的相关内容. binlog2sql是一个开源的Python开发的 ...
- MySQL Binlog解析
概述 MySQL的安装可以参考:Linux(CentOS)中常用软件安装,使用及异常--MySQL, VmTools MySQL关于Binlog的官方文档:The Binary Log 基于Binlo ...
- mysql binlog解析 c_解析MYSQL BINLOG二进制格式(9)--infobin解析binlog帮助文档
原创:转载请说明出处谢谢! 上接 http://blog.itpub.net/7728585/viewspace-2133188/ 解析MYSQL BINLOG 二进制格式(1)--准备工作 http ...
- opentrace在mysql中使用_采用OpenReplicator解析MySQL binlog
Open Replicator是一个用Java编写的MySQL binlog分析程序.Open Replicator 首先连接到MySQL(就像一个普通的MySQL Slave一样),然后接收和分析b ...
- mysql binlog 回退_MYSQL Binglog分析利器:binlog2sql使用详解
大部分使用mysql的业务也都会开启binlog,用以记录数据库的更新操作.当然binlog的格式大家也都比较清楚,分别是statement.mixed.row模式.针对row格式的binlog,它以 ...
- binlog解析工具—my2sql
文章目录 一.工具介绍 1.1 工具对比 1.2 用途 1.3 限制 1.4 性能对比 二.工具使用 2.1 参数说明 2.2 使用案例 一.工具介绍 my2sql是go版MySQL binlog ...
- MySQL Binlog 介绍
Binlog 简介 MySQL中一般有以下几种日志: 日志类型 写入日志的信息 错误日志 记录在启动,运行或停止mysqld时遇到的问题 通用查询日志 记录建立的客户端连接和执行的语句 二进制日志 记 ...
- mysql binlog查看工具_【使用 Rust 写 Parser】4. 解析 binlog
系列所有文章 PrivateRookie:[使用 Rust 写 Parser]1. 初识 nomzhuanlan.zhihu.com PrivateRookie:[使用 Rust 写 Parser] ...
- 通过Maxwell解析MySQL Binlog,打好业务多活的基础
这是学习笔记的第 2153 篇文章 在Binlog解析方向和数据流转方向上,经常会提到比较有名的几类工具,阿里的Canal,Zendesk的Maxwell和Yelp的mysql_streamer,他们 ...
最新文章
- 欧卡智舶发布全球首个城市内河无人驾驶数据集!
- DongLiORM 第二次更新
- 数据库 -- 由数据库连接池引出的三种设计模式
- 分布式Session框架
- Entityframework批量删除
- python有哪些游戏模块_python游戏模块 Pygame常用方法
- 链栈和递归实现迷宫算法
- 性能测试:基础(1)
- mysql服务没有权限开机不会自启动_计算机服务项里没有MySQL服务,无法设置开机自启动或者关闭自启动,的解决办法...
- bigint在java中用什么表示_即使我确信圣诞老人不存在,我却仍然每年给我的孩子们准备圣诞礼物,为什么?...
- 搭建自己的病毒扫描系统clamav-原版教程
- PowerMockito框架入门及使用
- webservice框架 java_java开发webservice的几种方式详解
- 迅雷:游移的4亿用户帝国
- python 暑期培训
- fatal: unable to access ‘https://github xxxxxxxxx的解决方法
- Correct the classpath of your application so that it contains a single, compatible version oforg.spr
- Statistics 基础之Hypothesis Tests1---t检验
- Win7更换锁屏壁纸
- python urllib之parse中urlencode、quote、unquote使用方法