实现思路
- 解析查询语句
- 脱敏规则验证
- 改写SQL/对结果脱敏
具体实现
解析查询语句
主要有两个选择
阿里的druid,作为数据库连接池,它自身也有一个SQL解析模块,开源的分布式数据库中间件mycat就是基于该模块实现的语句解析。
去哪儿的inception,自身有一个语法树打印的功能,能够解析查询语句,最终输出为可视化的query_tree。
druid demo
1 | package com.tops001.sqlparser.durid.sqlparser; |
解析结果
1 | {archer.sql_users=Select, sql_workflow=Select} |
inception demo
1 | #!/usr/bin/python |
解析结果
1 | { |
由于archer本身是基于inception做的SQL上线审核,最后SQL查询解析模块也顺势选择了inception,但是inception有一些已知的无法解析的语法,如子查询嵌套,但用于简单查询已足够。
脱敏规则
脱敏规则定义表
1 | CREATE TABLE `data_masking_rules` ( |
脱敏字段定义表
1 | CREATE TABLE `data_masking_columns` ( |
数据脱敏
改写SQL
1 | 手机号:保留前三后四,中间用*代替 |
正则处理结果集
1 | # -*- coding:utf-8 -*- |