其余,由于程序员的水平及履历参差不齐,相称大一部分程序员在编写代码的时候,并不会考虑SQL注入风险,使不法分子植入恶意SQL攻击数据库有了可乘之机。SQL注入通过将恶意的SQL查询或更新语句插入到运用的输入参数中,后台数据库做SQL解析时将遭受攻击。由于Prepare协议在输入参数之前已经完成了SQL的预编译,因此将恶意的SQL当做参数插入时,数据库不会重新编译,因此可以防止SQL注入攻击,具备更高的安全性。
综上,Prepare协议可以带来数据库性能和稳固方面的双重收益。
Prepare协议分为两个阶段,第一阶段是提交带占位符的预编译SQL,第二阶段是传输数据,将占位符更换为数据进行实行。

Prepare协议运用代码案例:
3.数据库代理(Proxy)场景下的Prepare协议
在“高可用只读,让RDS for MySQL更稳定”一文中,我们曾提及了利用数据库代理(Proxy)实现读写分离及高可靠的方案。GaussDB(for MySQL)同样支持多Proxy,以实现读写分离,自动均衡负载及在只读实例故障时自动路由至其他实例的高可靠和高性能方案。——GaussDB(for MySQL)同样支持多Proxy,以实现读写分离,自动均衡负载及在只读实例故障时自动路由至其他实例,具备高可靠和高性能能力。
数据库代理是位于数据库做事端和运用做事端之间的网络代理做事,其吸收运用程序的连接,根据路由情形将SQL要求自动分发到GaussDB(for MySQL)节点上实行。数据库代理(以下简称proxy)具有高可用、高性能、可运维、大略易用等特点,供应自动读写分离、连接池、事务拆分、会话同等性等功能,详细架构图如下:
3.1 Proxy下的Prepare协议实现方案
未采取Proxy时,Prepare协议的两阶段(预编译阶段和实行阶段)直接在数据库节点上实行。Proxy加入后,由于数据库代理会将同一个连接上的不同SQL分发到多个后端数据库上,因此数据库代理须要保存预编译SQL和实行参数的对应关系,并在实行时,传入至数据库节点上实行。目前Proxy场景下的Prepare协议实现方案有两种:
文本模式(出身较早的模式)透传模式(现下流行的模式)3.1.1 文本模式:
Proxy内部保存预编译SQL的干系信息,将客户端发送的二进制Prepare协议转换为普通文本协议进行传输,即在Proxy侧完成解析和更换,将解析和更换后的SQL发今后端数据库,无需依赖数据库进行解析转换。
上风:
实现大略,任何SQL无条件封装成文本SQL直接实行。可以任意路由。当数据库代理和后端数据库连接断开时,客户端无感知,自动兼容容灾场景。劣势:
须要解析类型构造,并拼装原始SQL,对发过来的类型强依赖。例如:实行SELECT FROM t1 LIMIT ?,当发送String类型数据时,会将其拼接成一个带引号的String值:SELECT FROM t1 LIMIT ‘10’, 数据库不支持此种SQL语法导致实行报错。由于每条SQL都须要在数据库代理侧进行拼接,且拼接时,Proxy侧须要根据数据类型处理SQL注入问题,代理侧性能损耗严重,随意马虎成为瓶颈。3.1.2透传模式
透传模式下Proxy侧只做预编译阶段的事情,实行阶段将预编译语句和参数数据直接发今后端数据库。即Proxy侧不实行解析和编译。透传模式有两种实现办法:
广播式透传(多数数据库厂商在用的模式)
广播式透传是将客户端发的预编译语句发送到所有的后端数据库节点,即所有后端数据库节点在吸收到参数后都可以解析、编译和实行语句。故发送参数时,只须要任意选择一个已发送预编译语句的节点传输即可。
上风:
Proxy无需拼装解析SQL。Proxy无需掩护预编译语句和后端数据库节点之间的映射关系,只须要卖力广播和转发,实现大略。劣势:
所有数据库节点承受了同等的压力,同一条预编译语句被多个数据库节点实行,资源存在摧残浪费蹂躏,某个节点压力大时,还会承受编译语句的压力。当多个节点非常后规复时,Proxy须要在所有规复的数据库节点上重新实行预编译语句,才能担保参数和预编译语句之间的对应关系,此时会导致代理的压力过大。单节点透传(GaussDB(for MySQL)代理利用的模式)
单节点透传是数据库代理将预编译语句根据路由发往数据库个中一个节点,并掩护预编译语句和数据库节点之间的映射关系,当实行参数数据时,根据映射关系将参数发往指定节点实行。
上风:
Proxy无需拼装解析SQL。不会导致后端数据库资源摧残浪费蹂躏和整体压力过大。劣势:
客户端存储的预编译语句单点透传到了某数据库节点,在实行阶段须要将客户端输入的参数路由到对应的节点, Proxy须要处理此关系,功能实现繁芜,给GaussDB(for MySQL)团队编码带来更大寻衅。
4.性能比拟
我们对Proxy场景下GaussDB(for MySQL)在文本模式和透传模式下的Prepare协议做了性能测试比拟。测试显示透传模式下的性能优于文本模式,性能提升约28%。
实行测试的软硬件规格解释如下表所示:
由于现下条件所限,虽然我们没有测试广播透传模式与单点透传模式间的性能比拟,但是从前文的方案比拟中不难预见,单点透传模式具有更高的稳固性,由于其更不随意马虎在Proxy侧和数据库节点侧产生资源花费,带来瓶颈。
5.总结GaussDB(for MySQL) Proxy下的Prepare协议将原来文本模式的处理办法优化为透传模式,其性能得到很大提升,办理了文本模式中对数据类型强依赖的问题。目前业界多采取广播模式的透传,而GaussDB(for MySQL) Proxy侧则将广播模式优化为单点传输模式,降落了数据库的整体性能损耗。
关注#华为云开拓者同盟# 点击下方,第一韶光理解华为云新鲜技能~
华为云博客_大数据博客_AI博客_云打算博客_开拓者中央-华为云
#科技##程序员##数据库#