“数据”是任何系统避无可避的话题,有了数据,系统才会体现出价值,数据可以被存储在数据库,文件,存储引擎或其他分布式中间件中,本文主要讲解的是存储在MySQL中的数据,如何做SQL审核和跟踪来为您的“失误”保驾护航,本文SQL审核和监控平台主要基于: inception+archer
搭建,本文涵盖使用和部署,如果您有这方面的需求,这是一个不错的选择,本文多图预警!
在我们公众号发出《SQL审核监控平台的设计与实现》后,很多用户在后台和我们反馈目前这类系统有开源实现么,所以本文将为您呈现基inception+archer
搭建的一套完整的自动化SQL运维平台,相信会对您有帮助。
帮助您解决以下困惑:
SQL审查流程规范化:执行SQL变更需求提出者 -> 开发人员将需求转化为SQL -> 审核人员审核SQL -> DBA执行SQL;
SQL误操作回退;
SQL查询权限控制:可将有限的数据库操作权限开放给任意人;
SQL字段脱敏;
SQL语句规范化:不规范的SQL是不被允许提交的;
演示:后台管理
首先我们需要配置一个需要做SQL审核的数据库主库地址,登录后台管理系统,输入主机信息,如下图:

因为我们的SQL审查是需要一定工作流程,所以还需要在后台定义一个工作流,点击工作流配置,来新增加一个工作流(先liu审核,后xue审核):

在用户配置里,可以增加用户,在脱敏设置里,可以设置哪些表的哪些字段脱敏(比如手机号,身份证号,防止敏感信息被SQL查询者看到)

经过脱敏设置和脱敏规则后,我们在系统中查询相关字段后,得到的结果如下:

另外你可以在后台认证和授权相关的操作,这里不再给出,我们建立好数据库需要查看和提交SQL的人员后,就可以正式来使用这套系统了。
演示:SQL审查与自动化运维
普通用户登录,你可以使用SQL上线工单(DML和DDL语句,需审核后才被执行),SQL在线查询(限制用户返回条数,字段脱敏显示等),SQL查询权限申请,SQL审核必读(SQL编写规范),统计图展现每个用户SQL执行情况。
SQL工单操作
首先有权限的用户提交SQL工单,比如:

请注意:通过SQL检测按钮必须确保审核状态为pass才可以提交SQL,可选择是否要备份受影响的这些数据,一般选择是,以便回溯数据,选择好审核人后,提交SQL,此时SQL并为真正执行。
然后利用审核人账号登录系统,在SQL上线工单中就可以看到这个SQL变更:

通过点击标题去处理这个工单,你可以通过审核或终止流程:

通过审核后,DBA角色的用户就可以执行这个SQL(如果单单是审核者身份的人是不能执行SQL的哦!)

当然你也可以定时执行,此时SQL才会被影响到MySQL数据库,如果你对结果不满意,DBA角色的登录用户可以回撤:

我们从回撤的SQL可以看到,此时的数据是刚才进行update语句时的数据情况,如果在update语句之后,回撤之前,数据有被其他程序改写过,回撤后的数据就应该不对了,这点要特别注意:

以上就是一个完整的SQL审查流程,简易化后就是:
执行SQL变更需求提出者 -> 开发人员将需求转化为SQL -> 审核人员审核SQL -> DBA执行SQL
另外数据库的查询权限可以开放给开发人员或其他有SQL基础的同事,后台有完整的针对SQL查询的权限控制和脱敏设置,这里就不再简述!
Inception简介和安装
一款用于MySQL语句的审核的开源工具,不但具备自动化审核功能,同时还具备执行、生成对影响数据的回滚语句功能。
基本架构:

1,资料准备
目前Inception已闭源:https://github.com/mysql-inception/inception
Inception文档:https://github.com/cookieY/inception-document
2,安装
(1)依赖包安装
1yum -y install cmake libncurses5-dev libssl-dev g++ bison openssl-devel.x86_64
(2)编译
1[root@node1 ~]# unzip inception-master.zip
2[root@node1 ~]# cd inception-master
3[root@node1 ~]# ./inception_build.sh debug [Xcode]
输入参数有两个,第一个是软件编译安装目录,第二个是平台代码,Xcode表示Linux平台,不填表示默认Linux平台
1mv debug /usr/local/inception
2ln -s /usr/local/inception/mysql/Inception /usr/bin/inception
(3)inception配置文件
/etc/inc.cnf
1[inception]
2general_log=1
3general_log_file=/usr/local/inception/log/inception.log
4port=6669
5socket=/usr/local/inception/inc.socket
6character-set-client-handshake=0
7character-set-server=utf8
8inception_remote_system_user=root
9inception_remote_system_password=123456
10inception_remote_backup_port=3306
11inception_remote_backup_host=192.168.1.151
12inception_support_charset=utf8mb4
13inception_enable_nullable=0
14inception_check_primary_key=1
15inception_check_column_comment=1
16inception_check_table_comment=1
17inception_osc_min_table_size=1
18inception_osc_bin_dir=/usr/local/inception/data
19inception_osc_chunk_time=0.1
20inception_enable_blob_type=1
21inception_check_column_default_value=1
特别参数解释
inception_remote_system_user=root ##远程备份数据库用户名
inception_remote_system_password=root123 ##远程备份数据库用户密码
inception_remote_backup_port=3306 ##远程备份数据库端口
inception_remote_backup_host=10.xx.xx.xx ##远程备份数据库IP地址,本次演示例如10.0.0.1
inception_support_charset=utf8mb4,utf8,latin1 ##建表、建库MYSQL支持的字符集类型
(4)启动
a.启动方式01inception --defaults-file=/etc/inc.cnf
最佳启动方式是通过nohup后台启动nohup inception --defaults-file=/etc/inc.cnf &
b.启动方式02inception --port=6669
注意: 因为Inception支持OSC执行的功能,是通过调用pt-online-schema-change工具来做的,但如果Inception后台启动(&)的话,可能会导致pt-online-schema-change在执行完成之后,长时间不返回,进而导致Inception卡死的问题,这个问题后面会解决,但现阶段请尽量不要使用后台启动的方式,或者可以使用nohup Inception启动命令 &的方式来启动。
(5)登陆校验
启动成功之后,可以简单试一下看,通过MySQL客户端mysql -uroot -h192.168.1.151 -P6669
登录上去之后,再执行一个命令:inception get variables;
输出了所有的变量,恭喜你,已经启动成功了,都说了非常简单。
archer的部署与使用
基于inception的自动化SQL操作平台,支持工单、审核、定时任务、邮件、OSC等功能,还可配置MySQL查询、慢查询管理、会话管理等
开发语言和推荐环境
python3.4及以上
django1.8.17
mysql : 5.6及以上
linux : 64位linux操作系统均可
主要功能
自动审核:发起SQL上线,工单提交,由inception自动审核,审核通过后需要由审核人进行人工审核
人工审核:inception自动审核通过的工单,由其他研发工程师或研发经理来审核,DBA操作执行SQL
为什么要有人工审核?回滚数据展示:工单内可展示回滚语句,支持一键提交回滚工单
定时执行SQL:审核通过的工单可由DBA选择定时执行,执行前可修改执行时间,可随时终止
pt-osc执行:支持pt-osc执行进度展示,并且可以点击中止pt-osc进程
MySQL查询:库、表、关键字自动补全,查询结果集限制、查询结果导出、表结构展示、多结果集展示
MySQL查询权限管理:基于inception解析查询语句,查询权限支持限制到表级,查询权限申请、审核和管理,支持审核流程配置,多级审核
MySQL查询动态脱敏:基于inception解析查询语句,配合脱敏字段配置、脱敏规则(正则表达式)实现敏感数据动态脱敏
慢日志管理:基于percona-toolkit的pt_query_digest分析和存储慢日志,并在web端展现
邮件通知可配置邮件提醒,对上线申请、权限申请、审核结果等进行通知
对异常登录进行通知
具体的安装步骤可参考:https://github.com/jly8866/archer
你可以继续阅读:
ElasticSearch 6的集群部署与使用|“大”中台,“小”前端的架构演变|SQL审核监控平台的设计与实现|云服务推送API中消息中间件的使用 | 云服务平台中推送服务的设计与实现 | 对微服务的理解以及实现一套微服务对外发布API管理平台 | 项目开发中常用的设计模式整理 | 异构语言调用平台的设计与实现 | 大话正则表达式 | 云API平台的设计与实现 | 个税改了,工资少了,不要慌!文末附计算器
关注我们的公众号
长按识别二维码关注我们





