【原创】MySQL Proxy - query注入动作中的脚本序列

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:
    下图展示了一个如何使用 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 进行改变:  

?
1
SELECT * FROM City;

改变为一系列 query:  

?
1
2
3
SELECT NOW();
SELECT * FROM City;
SELECT NOW();

       你同样可以修改原始的语句,例如,向每一条要执行的语句中添加 EXPLAIN 以获取该语句如何被处理的信息,同样也是将原始 query 语句进行改变,变成下面一系列语句:  

?
1
2
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 的方式过滤掉额外的结果集。
相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
2月前
|
SQL 关系型数据库 MySQL
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
【MySQL进阶之路丨第十四篇】一文带你精通MySQL重复数据及SQL注入
48 0
|
2月前
|
存储 关系型数据库 MySQL
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
【MySQL进阶之路丨第十三篇】一文带你精通MySQL之ALTER命令及序列使用
40 0
|
2月前
|
SQL 关系型数据库 MySQL
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
MySQL技能完整学习列表3、SQL语言基础——1、SQL(Structured Query Language)简介——2、基本SQL语句:SELECT、INSERT、UPDATE、DELETE
51 0
|
1月前
|
关系型数据库 MySQL
一键下载MySQL安装包-batch脚本
一键下载MySQL安装包-batch脚本
33 2
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 数据库导出及读文件
Mysql注入 -- 数据库导出及读文件
97 0
|
2月前
|
关系型数据库 MySQL
Mysql注入 -- 注入类型
Mysql注入 -- 注入类型
16 1
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 联合注入
Mysql注入 -- 联合注入
16 0
|
2月前
|
关系型数据库 MySQL 数据库
Mysql注入 -- 布尔注入
Mysql注入 -- 布尔注入
12 0
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 延时注入
Mysql注入 -- 延时注入
9 0
|
2月前
|
安全 关系型数据库 MySQL
Mysql注入 -- 报错注入
Mysql注入 -- 报错注入
11 0