这部分的内容拖了很长时间了, 其实很早就想研究一下proxysql,主要是想通过这个产品来实现对数据库层面的防火墙功能。其实类似的产品有很多不过都是针对mysql产品的。比如美团的DBproxy,还有360的Atlas. 我之前也大致看了一下关于DBProxy的产品, 功能上类似, 不过配置起来可能比proxysql要简单一些。既然是类似的产品, 那我就从这个洋货开始入手。我们可以通过proxysql的官方网站来了解安装以及配置细节。
https://proxysql.com/
从proxysql的官方网站上我们可以了解到它提供下面几个功能。目前有很多人在使用这类数据库的proxy产品在做读写分离,至于为啥要做读写分离, 其实我不太关心,因为读写分离这块更多是这对应用或者数据库的性能来说的。我们干啥说啥,我最关注的就是下面6个功能中的第三和第四个功能。
说到防火墙,我们做网络的大侠可能很容易理解,就是配置各种过滤,阻断各种阴沟暗渠。我们今天介绍的proxysql属于一种应用层的防火墙,和waf属于同一层面,但是功能和防护的对象上是完全不一样的,数据库防火墙重点是为了保护数据库资源。我在这里准备着重介绍一下proxysql的过滤和log记录功能。
1, application layer proxy
2, zero-downtime changes
3, database Firewall
4, Advanced query qules
5, sharding& rewrite
6, Failover detection
下面的截图是从proxysql的官方网站上截取出来的,也算作是一种非常常见的官方配置模式,就是保护各种连接数据库的请求流量。无论是内部威胁还是外部威胁都会被监控和过滤。很多时候应用在进行数据库操作的动作都采用存储过程或者预定义语句,这些可以从一定程度上防范数据库注入之类的风险。反而是内部的数据泄露风险难以防范,比如开发人员或者DBA。因此我建议采用第二张图的设计思路。
在下面的图中,内部PC不能直接访问DB数据库, 只能通过proxysql来访问身后的数据库。当内部人员访问proxysql的时候, 相应的查询会被记录下来,查询结果中的敏感信息可以通过proxysql的规则过滤掉。
1, 数据库查询语句:
select * from sys_user;
2,经过pr