https://github.com/xylou/sqlMask
为了找工作写的一个开源项目,但是觉得有点问题了
是通过改写 sql 来做的数据脱敏
比如要查询 phoneNum,phoneNum 配置了策略是隐藏最后四位,mask(col,8,11,*)
select phoneNum from table
那改写 sql 的结果就是
select mask(phoneNum,8,11,*) phoneNum from table
如果是上面的这种普通 sql 还比较好处理
但是现在有这么个问题,比如下面这种类型的 sql
如果改写成这种,这也是我现在的方案
select phoneNum from (select mask(phoneNum,8,11,*) phoneNum from table) t where t.phoneNum = '13800001111';
那其实就有问题了,where 语句是有问题的
如果改写成这种:
select mask(phoneNum,8,11,*) phoneNum from (select phoneNum from table) t where t.phoneNum = '13800001111';
那数据安全就不能保证,因为我可以写下面这种 sql 查到原始数据
select phoneNum from (select '12345678900' + phoneNum as phoneNum from table) t where phoneNum = '13800001111';
一定程度可以绕过了
应该怎么处理呢
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.