博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【原创】MySQL Proxy - query注入动作中的脚本序列
阅读量:5875 次
发布时间:2019-06-19

本文共 1210 字,大约阅读时间需要 4 分钟。

hot3.png

【】
       下图展示了一个如何使用 proxy 将客户端发送过来的 query 注入到 query 队列的例子。因为 proxy 位于客户端和 MySQL 服务器之间,所以经由 proxy 发送到服务器,以及由 proxy 最终返回给客户端的信息,不需要做到完全匹配或者关联。一旦客户端连接到了 proxy ,下图中展现的由客户端发送每一个单独的 query 引起的命令序列将会发生。
       当客户端向 proxy 提交了一个 query 的时候,proxy 内部的 read_query() 函数将会被触发。该函数会添加 query 到 query 队列中。
       一旦 read_query() 函数执行完毕, query 会按加入队列的顺序向 MySQL 服务器提交。
       MySQL 服务器会返回由每一个 query 所产生的结果集,每一个提交的 query 对应一个结果集。当结果集到达 proxy 后,read_query_result() 函数会被触发,在每一次触发的时候都可以由我们自己决定哪个结果集需要发送回客户端。
       例如,你可以向全局 query 队列中添加额外的 query 让服务器来进行处理。可以用于在原始 query 的前后添加获取统计信息的 query 语句的方式对原始 query 进行改变:
SELECT * FROM City;
改变为一系列 query:
SELECT NOW();SELECT * FROM City;SELECT NOW();
       你同样可以修改原始的语句,例如,向每一条要执行的语句中添加 EXPLAIN 以获取该语句如何被处理的信息,同样也是将原始 query 语句进行改变,变成下面一系列语句:
SELECT * FROM City;EXPLAIN SELECT * FROM City;
       在上述两个例子中,客户端将会收到比预期更多的结果集。无论你如何控制进入的 query 以及返回的结果,由 proxy 返回的对应 query 数量的结果集必须要与由客户端原始发送的 query 数目相等。
       你可以调整客户端代码以便处理由 proxy 返回的多个结果集,但是在大多数情况下,你会希望 proxy 的存在对于客户端来说是透明的。为了保证这一点,query 的数量和结果集的数量应该保持一致,你可以使用 MySQL Proxy 的 read_query_result() 函数来提取额外的结果集信息,以便只返回客户端原始 query 对应的结果集。你可以通过在向 query 队列中添加 query 时,赋予每一个 query 一个唯一的 ID 的方式来保证这点,然后当 read_query_result() 函数 在后续处理中收到结果集时通过匹配该 ID 的方式过滤掉额外的结果集。

转载于:https://my.oschina.net/moooofly/blog/111739

你可能感兴趣的文章
LeetCode-114. Flatten Binary Tree to Linked List
查看>>
Zedboard安装桌面系统ubuntu及opencv(2)
查看>>
函数声明优先级高于变量赋值
查看>>
20151217jqueryUI--自动补全工具
查看>>
链接脚本与重定位
查看>>
Hibernate 框架基本知识
查看>>
keystone nova v2 python
查看>>
VMware虚拟机Bridged(桥接模式)
查看>>
hdu4747 线段树区间修改值,区间查询和及最大值即最大值位置
查看>>
Python 字符串、列表、字典 操作方法大全 & 正则re
查看>>
Vue.js 介绍及其脚手架工具搭建
查看>>
Register code
查看>>
oracle基础入门(二)
查看>>
java 基础知识-数组的7种算法(排序、求和、最值、遍历...)
查看>>
倒要看看你有啥本事
查看>>
bzu-java(三)
查看>>
【初体验】valgrind分析程序性能
查看>>
testlink(以及服务器)问题定位思路
查看>>
Liferay Portal使用MySQL数据库配置
查看>>
个人代码库の模拟QQ振屏功能
查看>>