信息安全体系建设☞数据安全(2)--proxySQL

海山数据库(He3DB)代理ProxySQL使用详解:(二)功能实测 后面启动会就不会读取proxysql.cnf文件了!如果想要让proxysql.cnf文件里的配置在重启proxysql服务后生效(即想要让proxysql重启时读取并解析proxysql.cnf配置文件),则需要先删除/var/lib/proxysql/proxysql.db数据库文件,然后再重启proxysql服务。这样就相当于初始化启动proxysql服务了,会再次生产一个纯净的proxysql.db数据库文件(如果之前配置了proxysql相关路由规则等,则就会被抹掉)。 阅读详情

这部分的内容拖了很长时间了, 其实很早就想研究一下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的规则过滤掉。

  • #安装过程大家可以参考官网的文档, 在linux下面安装基本就是一个yum命令就完事。 我这里就不做搬运工了。
  • 实现查询结果过滤的场景示例:

1, 数据库查询语句:
select * from sys_user;
2,经过proxysql过滤之后,实际在数据库执行的语句:
select id,uid,nickname,insert(usr_mobile, 4, 4, ‘xxxxx’) as usr_mobile from sys_user

连接proxysql管理端

  • #安装完成之后, 我们需要访问proxysql 的管理平台。访问方法和对mysql的管理比较类似, 不过是需要指定端口等信息
$ mysql -u admin -padmin -h 127.0.0.1 -P6032 --prompt 'ProxySQL Admin> '

添加mysql server

insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘192.168.80.12’,3306);
insert into mysql_servers(hostgroup_id,hostname,port) values(10,‘192.168.80.13’,3306);
insert into mysql_servers(hostgroup_id,hostname,port,weight,max_connections,max_replication_lag,comment) values(100,‘192.168.80.10’,3306,1,1000,10,‘testdb’);
load mysql servers to runtime;
save mysql servers to disk;
查看一下创建的mysql数据库信息是否正确:
MySQL [(none)]> select hostgroup_id,hostname,port,status,weight from mysql_servers;
±-------------±--------------±-----±-------±-------+
| hostgroup_id | hostname | port | status | weight |
±-------------±--------------±-----±-------±-------+
| 10 | 192.168.80.12 | 3306 | ONLINE | 1 |
| 20 | 192.168.80.13 | 3306 | ONLINE | 1 |
±-------------±--------------±-----±-------±-------+

添加访问mysql账号

insert into mysql_users(username,password,default_hostgroup) values(‘sqluser’,‘password’,10);
insert into mysql_users(username,password,active,default_hostgroup,transaction_persistent) values(‘dba’,‘dba’,1,100,1);
load mysql users to runtime;
save mysql users to disk;

添加规则

下面是三个例子, 我们可以参考这个格式来编辑规则。

insert into mysql_query_rules(rule_id,active,match_digest,destination_hostgroup,apply) VALUES(1,1,'^SELECT.*FOR UPDATE$',10,1),(2,1,'^SELECT',20,1);


load mysql query rules to runtime;
save mysql query rules to disk;

在编辑规则的时候需要注意各个参数之间需要采用逗号的方式隔离开来,我们可以参考下面的列表来编辑规则。

| rule_id | active | username | schemaname | flagIN | client_addr | proxy_addr | proxy_port | digest | match_digest | match_pattern |
negate_match_pattern | re_modifiers | flagOUT | replace_pattern |
destination_hostgroup | cache_ttl | cache_empty_result | cache_timeout
| reconnect | timeout | retries | delay | next_query_flagIN |
mirror_flagOUT | mirror_hostgroup | error_msg | OK_msg | sticky_conn |
multiplex | gtid_from_hostgroup | log | apply | attributes | comment
|

下面是两个例子,大家可以参考一下,我们重点关注的就是replace_pattern。目的就是想把一些包含敏感信息的查询语句做修改,比如下面这样,其中match_pattern采用正则的方式来抓取原始的sql查询语句,并采用replace_pattern进行替代。
insert into mysql_query_rules
(rule_id,active,apply,log,destination_hostgroup,match_pattern,replace_pattern)
values
(1,1,1,1,100,"^(select.*?from) t_user (.*)$",“select usr_id,usr_nick,insert(usr_password, 6, 8, ‘xxxxxxxx’) as usr_password,usr_email,insert(usr_mobile, 4, 4, ‘xxxxx’) as usr_mobile from sys_user \2 ;”);

insert into mysql_query_rules
(rule_id,active,apply,log,destination_hostgroup,match_pattern,replace_pattern)
values
(2,1,1,1,100,"^(select.?from) t_user (.)$",“select usr_id,usr_nick,insert(usr_password, 6, 8, ‘xxxxxxxx’) as usr_password,usr_email,insert(usr_mobile, 4, 4, ‘xxxxx’) as usr_mobile from sys_user \2 ;”);

insert into mysql_query_rules
(rule_id,active,apply,log,destination_hostgroup,match_pattern,replace_pattern)
values
(3,1,1,1,100,"^(select.?from) testdb.t_user (.)$",“select usr_id,usr_nick,insert(usr_password, 6, 8, ‘xxxxxxxx’) as usr_password,usr_email,insert(usr_mobile, 4, 4, ‘xxxxx’) as usr_mobile from testdb.sys_user \2 ;”);

这几个规则的内容基本上是一样的, 只是ruleID和对应的数据表不一样,有的时候还要考虑输入字符的格式,只有你的规则匹配上了输入的内容, 才能触发相应的动作。

开启审计日志

set mysql-eventslog_filename = ‘/var/lib/proxysql/audit.log’ ; – 会生成 audit.log.0000xx这种命名格式的文件
INSERT INTO mysql_query_rules (rule_id, active, match_digest,destination_hostgroup,log,apply) VALUES (4,1,’^select’,100,1,0);
INSERT INTO mysql_query_rules (rule_id, active, match_digest,destination_hostgroup,log,apply) VALUES (5,1,’^SELECT’,100,1,0);
其中满足match_digest的查询语句,就会触发Log动作。

LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;

检查一下我们配置的规则列表:
select rule_id,active,match_digest,match_pattern,destination_hostgroup,apply,log from mysql_query_rules ;
±--------±-------±-------------±-------------------------------------------±----------------------±------±----+
| rule_id | active | match_digest | match_pattern | destination_hostgroup | apply | log |
±--------±-------±-------------±-------------------------------------------±----------------------±------±----+
| 1 | 1 | NULL | ^(select.?from) t_user (.)$ | 100 | 1 | 1 |
| 2 | 1 | NULL | ^(select.?from) t_user (.)$ | 100 | 1 | 1 |
| 3 | 1 | NULL | ^(select.?from) testdb.t_user (.)$ | 100 | 1 | 1 |
| 4 | 1 | ^select | NULL | 100 | 0 | 1 |
| 5 | 1 | ^SELECT | NULL | 100 | 0 | 1 |
±--------±-------±-------------±-------------------------------------------±----------------------±------±----+

测试

测试读操作是否路由给20的读组

mysql -usqluser -ppassword -P6033 -h127.0.0.1 -e ‘select @@server_id’

测试写操作

[root@80_11 ~]# mysql -usqluser -ppassword -P6033 -h127.0.0.1 -e ‘create database db1’
[root@80_11 ~]# mysql -usqluser -ppassword -P6033 -h127.0.0.1 -e ‘select @@server_id’
±------------+
| @@server_id |
±------------+
| 12 |
±------------+

本文介绍的一个一款开源的数据库防火墙,对该产品的学习可以帮助我们理解数据库防火墙的实现思路。更重要的是我们可以采用数据库防火墙的方式来实现透明的,终端无感知的数据脱敏和数据监控。在安全领域不断细分的场景下, 我们需要采用不同的产品来满足不同的安全需求。我们再提到防火墙不应该仅仅考虑到网络防火墙, 还有应用防火墙,数据库防火墙。现在也有很多的商业化的数据库防火墙产品, 他们可以对不同种类的数据库提供支持。

通过 ProxySQL 在 TiDB 上实现 SQL 的规则化路由 在 ProxySQL 集群中,根据 Router Table(mysql_query_rules)中配置的 TP 和 AP 的 pattern 配置,将 TP 与 AP 的 查询请求自动的路由配置好的 TP_GROUP 与 AP_GROUP 中。Audit 的需求是非常常见的。甚至来说,以上介绍的种种强大的功能,在 TiDB 中仍然适用,在某种程度上,弥补了 TiDB 生态的不足。在我看来,ProxySQL 是一款强大到没有什么多余功能的产品,他的每一个特性都能切实的命中用户的痛点,满足用户的需求。 阅读详情

相关推荐

ProxySQL安全维护实战:26步打造无懈可击的数据防线

🔥关注墨瑾轩,带你探索编程的奥秘!🚀🔥超萌技术攻略,轻松晋级编程高手🚀🔥技术宝库已备好,就等你来挖掘🚀🔥订阅墨瑾轩,智趣学习不孤单🚀🔥即刻启航,编程之旅更有趣🚀。

java专栏 1217

一种基于proxysql的数据脱敏思路

背景:我们这边给研发查数据的是通过phpmyadmin进行的,通常情况下研发人员查数据写法是 select * from db1.tb1 where id=xxxx 。脱敏的思路:通过proxysql对 关于testdb.t_user 表的查询做改写。实验环境:数据库主机: 192.168.20.10:3306 mysql账号:dba 密码: dbaproxysql版...

bingluo8787的博客 598

免安装版proxysql+mgr搭建,亲测成功

文档中写了详细的proxysql搭建过程,绕过很多坑点。希望各位老司机指正。

ProxySQL Query Logging

Query Logging ProxySQL能够记录完整的查询日志,是通过查询规则来配置,粒度可大可小。 Setup 首先,全局启用logging SET mysql-eventslog_filename='queries.log';  变量需要load到runtime,最后save到磁盘 LOAD MYSQL VARIABLES TO RUNTIME; SAV...

weixin_30924239的博客 597

永久免费的数据库防火墙

利用成熟有效的中间件技术,对SQL SERVER数据库进行网路物理隔离,对数据库的访问只能通过唯一端口进行,任何别的途径都无法访问数据库及其机器,连最常见的PING都不行,从而有效阻断了病毒和木马的入侵。

P450酶催化循环的Amber-Gromacs混合模拟实战:从血红素加氧到产物释放

本文详细介绍了针对P450酶完整催化循环的Amber-Gromacs混合模拟实战策略。通过Amber为关键氧合血红素中间体(CPDI)构建精确力场,再利用Gromacs的高效GPU加速进行长时间尺度动力学模拟,完整覆盖从底物结合到产物释放的催化过程,为研究酶催化机制提供了强大的计算工具。

weixin_29201859的博客 315

ProxySQL 读写分离配置

ProxySQL 是一个高性能、高可用的 MySQL 代理软件,旨在提升 MySQL 数据库的可扩展性和性能。它可以在应用程序和 MySQL 服务器之间充当中间层,提供强大的路由、负载均衡和查询优化功能。

Lzcsfg的博客 2040

linux系统下安装nexus做私服仓库

1.下载地址 官网地址:https://www.sonatype.com/download-oss-sonatype选择相应的版本即可 2.示例环境 linux系统:CentOS 7 JDK: 1.8 Nexus:nexus-3.16.2-01-unix.tar.gz 3.环境安装 从官网上下载安装包拷贝到linux环境中并解压; 如上图,进入bin目录中,然后运行./nexu...

chang18829350947的博客 1581

查询数据去除后面无用的0_新功能简介|MySQL8.0数据查询脱敏

数据库管理员会负责维护数据的隐私和完整性。针对数据的脱敏,通常的方案是:应用端实现或者引入加密机等。不过现在MySQL8.0实现了数据脱敏这个功能,可以减少应用的复杂性、减少开发的工作量,也能友好的保护了数据的隐私和完整性。在8.0.13企业版中推出插件“data_masking.so”,可以实现数据的脱敏操作。可以实现例如:银行卡号中的后四位为X字符、生产随机数据、例如电子邮件地址和支...

weixin_39821605的博客 460

分支界定法(branch and bound)与背包问题的代码实现

分支界定法(branch and bound)与背包问题的代码实现 LastEditTime: - 2021.2.3 不卖茶的吴龙茗茶 分支界定法是一种在整数规划中常用的算法,其主要思想为将大问题分割成小问题进行求解。分支界定法是围绕着一个二叉树进行的,以背包问题为例: 假设小明有一个背包,其总的容积为30,小明有三件东西可以带,三件东西的体积分别为:10,15,20。求问小明如何能够在背包中装下更大体积的物品? .

小吴同学的小屋 1885

Windows 10下Gpg4win 4.3.1安装与配置全攻略:从下载到邮件加密实战

本文详细介绍了在Windows 10系统下安装和配置Gpg4win 4.3.1的全过程,包括下载、验证、自定义安装以及密钥管理。特别重点讲解了如何通过Kleopatra证书管理器进行密钥创建和管理,以及在Outlook中实现邮件加密的实战操作,帮助用户全面提升数据安全防护能力。

weixin_29271263的博客 301

开源数据库防火墙GreenSQL

原文:http://blog.webserverguard.net/post/e5bc80e6ba90e695b0e68daee5ba93e998b2e781abe5a299GreenSQL.aspx 同步更新:Web应用安全观察站 http://blog.WebServerGuard.Net/ 应用防火墙主要关注于应用层面的,目前也有一个类对于DB层的应用防火墙,也可以算是数据库应用防火墙(...

weixin_30613343的博客 660

CYUSB3065配置CMOS

按照OG02B10的时序电路,在通过SCCB配置CMOS之前,需要三个电源上电,Xshutdown高电平和配置时钟电路。找到手册的第6章SCCB(跟IIC很像),可以看到SCCB的地址与SID引脚有关,这个需要到硬件原理图上确认下。这是Cypress的一个支持MIPI和UVC的模块,有例程支持OV5640,现在要替换替换成OG02B10。寄存器参数需要找到厂家的FAE,由他们提供,OG02B10的资料已经上传。(2)参考得宏的电路,时钟由主控提供,目前程序未实现。这里有两个重要参数需要搞定,摄像头的。

qq_40773212的博客 2947

proxysql 的mysql_users 表中用户的密码加密方式介绍

proxysql中操作用户的密码两种方式: 1)文本形式 2)hashed加密的形式,和数据库加密形式一直 所以我们配置加密的方式也有一下两种: 1)借助数据库,执行select password(‘pass_str'),登出结果更新到对应数据账密的密码字段 2)借助proxysql自有提供的方式更新密码,load mysql users to run; save mysql users...

damicook的博客 1260

使用-flat.vmdk文件恢复ESXI虚拟机的vmdk文件

解决flat.vmdk文件丢失恢复问题

神秘人的博客 6773

从零开始做对容量规划:一文讲透 SAP Greenfield sizing 与 Quick Sizer 落地方法

摘要 SAP项目早期硬件规划面临业务细节缺失的挑战,Greenfield sizing方法通过Quick Sizer工具将业务需求转化为硬件资源需求。该方法聚焦主要负载驱动因素而非精确预测,采用标准化问卷形式输入并发用户数、业务处理量等参数,输出内存、CPU等资源需求。关键步骤包括选择正确的Quick Sizer版本、创建sizing项目、参考SAP基准测试和认证目录校准结果,最终将需求交由硬件厂商落地。该方法特别适用于缺乏历史数据的新系统部署,帮助在不确定性中建立可控的容量规划模型,避免资源浪费或性能不足

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

2023年推荐几款开源或免费的web应用防火墙

2023年,数字经济将强势崛起,并且成为新一轮经济发展的动力,传统的黑客破坏性攻击如CC,转为更隐蔽的如0day进行APT渗透。所以无论私有服务器还是云厂商如Cloudflare、阿里云、腾讯云等都把web应用防火墙(WAF)作为网络安全的必配核心保护设施。

corpcorp的博客 9812

如何创建 SAP ABAP CDS View 的 Association

所以本文我们虽然学习了如何创建 SAP CDS View 的 association,知道了 association 是用来在 CDS View 里将两张数据库表关联起来,但根本不知道怎么使用这个 association. 而且从 association 的写法来看,似乎和本教程之前介绍 inner join,left join 这些数据库表的连接操作没什么区别,都是根据两张表的 carrid 和 connid 字段相同进行的连接。只看到了我们在 CDS View 源代码实现里,放出来的四个字段。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 904

proxysql 系列~审核功能

一 简介:今天我们来探讨下具体的审核功能 二 平台审计功能 一 proxysql 设置 set mysql-eventslog_filename = '/data/ProxySQL/log/sql.log' LOAD MYSQL VARIABLES TO RUNTIME; SAVE MYSQL VARIABLES TO DISK; mysql_query_rules表中设置路由规则...

weixin_33965305的博客 696

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ProxySQL技术实践分享

一、ProxySQL基本介绍1.1 前言ProxySQL是 MySQL 的高性能、高可用性、协议感知代理。以下为结合主从复制对ProxySQL读写分离、黑白名单、路由规则等做些基本测试。1.2 基本介绍先简单介绍下ProxySQL及其功能和配置,主要包括:最基本的读/写分离,且方式有多种;可定制基于用户、基于schema、基于语句的规则对SQL语句进行路由,规则很灵活;动态加载配置,即绝大部分的...

360技术 1928

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

SQL Firewall 开源项目最佳实践

SQL Firewall 开源项目最佳实践 1. 项目介绍 SQL Firewall 是一个开源项目,旨在为数据库提供防火墙功能,以防止SQL注入攻击。该项目通过分析数据库查询,拦截恶意SQL语句,从而保障数据库的安全性。它适用于各种规模的数据库系统,易于集成,并且可以与多种数据库引擎协同工作。 2. 项目快速启动 环境准备 在开始之前,请确保您的系统中已安装以下依赖: Python 3.6 或...

gitblog_00410的博客 472

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

MySQL中间件之ProxySQL(8):SQL语句的重写规则

返回ProxySQL系列文章:http://www.cnblogs.com/f-ck-need-u/p/7586194.html   1.为什么要重写SQL语句 ProxySQL在收到前端发送来的SQL语句后,可以根据已定制的规则去匹配它,匹配到了还可以去重写这个语句,然后再路由到后端去。 什么时候需要重写SQL语句? 对于下面这种简单的读、写分离,当然用不上重写SQL语句。 这样的读写分离,...

weixin_34268169的博客 905

ProxyWeb 是 ProxySQL 的图形可视化平台

ProxySQL 是一款专为 MySQL 设计的开源高性能、高可用性的数据库软件。它具备对数据库协议的感知能力,能够优化 MySQL 的性能和可用性。然而,由于 ProxySQL 的管理参数和监控选项繁多,默认的控制台命令行方式可能显得不够直观且不便ProxyWeb 是一款用于管理 ProxySQL 的图形化可视化平...

weixin_28909503的博客 301

完全私有化部署!一款开源轻量级网站防火墙!

SamWaf —— 是一款适用于小公司、工作室和个人网站的开源轻量级网站防火墙,完全私有化部署,数据加密且仅保存本地,一键启动,支持 Linux,Windows.

weixin_43400476的博客 876

ProxySQL!像C罗一样的强大!

关注↑↑↑我们获得更多精彩内容!作者 | 张甦, 数据库领域的专家和知名人士、图书《MySQL王者晋级之路》作者,51CTO 专家博主。近10年互联网线上处理及培训经验,...

Enmotech的博客 1211

数据脱敏显示-用户名和手机号

数据脱敏显示 前台的客户姓名和手机号需要脱敏处理,姓名只保留姓,手机号中间四位使用星号。 举例: 刘德华显示为刘** 15300001234显示为153****1234 不止显示的内容脱敏,后台也不能传递用户对象到前台,比如用户表(member)有姓名和手机号等字段,不能传递用户表的对象到前台页面,即使在前台不使用。 在spring boot项目中,使用model.addAttrib...

rain_lny的博客 8730
上一篇: 信息安全体系建设☞数据安全(1)
下一篇: Apache Log4j2 漏洞详谈
玩安全的小强
博客等级 码龄18年 17粉丝 16原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值