hhyo / Archery

SQL 审核查询平台
https://archerydms.com
Apache License 2.0
6k stars 1.68k forks source link

增加系统通用字符串脱敏规则-三段式通用脱敏规则、脱敏字段支持* #2698

Closed feiazifeiazi closed 1 month ago

feiazifeiazi commented 3 months ago

需求背景:

  1. 实例很多, 所有库的字段共计100万+,不同环境的库名不一样,有后缀。
  2. 敏感长度不一样。是全球化公司,电话,身份证,卡号长度完全不一样。

增加功能:

  1. 增加系统通用的脱敏规则。规则:根据字段长度自动分成3份,中间段脱敏。
  2. 脱敏字段配置时,支持对库名,表名使用*,不用再关心库名和表名,只用关心新增的敏感字段名,方便配置。

使用建议: 在配置脱敏字段时,只需要找出系统中phone,moblie,passowd等敏感的的字段名,向data_masking_columns表插入数据,不用再关心库名和表名。

不同长度的敏感字段脱敏效果: image

image

codecov[bot] commented 3 months ago

Codecov Report

All modified and coverable lines are covered by tests :white_check_mark:

Project coverage is 77.43%. Comparing base (3bad15a) to head (a47beea).

Additional details and impacted files ```diff @@ Coverage Diff @@ ## master #2698 +/- ## ========================================== + Coverage 77.39% 77.43% +0.04% ========================================== Files 119 119 Lines 16330 16359 +29 ========================================== + Hits 12639 12668 +29 Misses 3691 3691 ```

:umbrella: View full report in Codecov by Sentry.
:loudspeaker: Have feedback on the report? Share it here.

LeoQuote commented 3 months ago

不好意思,我没太理解这里的通用脱敏规则的含义,能否帮忙再详细说明一下使用方法?

方便的话写到代码中去一下。

feiazifeiazi commented 3 months ago

不好意思,我没太理解这里的通用脱敏规则的含义,能否帮忙再详细说明一下使用方法?

方便的话写到代码中去一下。

通用脱敏规则:

  1. 这个规则是将所有的字符串平均分成3份, 中间那份脱敏。 不用关心是不是 手机,邮箱,证件号,不需要一个个类型配置规则。
  2. 就是一个正则表达式:^([\s\S]{2,})([\s\S]{2,})([\s\S]{2,})$ , 正则的数据2是根据字段的长度动态计算的。

使用方式和以前一样的。只是可以选择 “通用规则”。

image

LeoQuote commented 3 months ago

能否将名字改为"三段式通用脱敏规则", 这样更加好理解一些, 你觉得如何? 还有可以考虑在model里预留几个槽位, 然后让管理员可以在系统配置中配置正则规则. 三段式的可以写死没问题, 我觉得这个确实是通用性很高

feiazifeiazi commented 3 months ago

能否将名字改为"三段式通用脱敏规则", 这样更加好理解一些, 你觉得如何? 还有可以考虑在model里预留几个槽位, 然后让管理员可以在系统配置中配置正则规则. 三段式的可以写死没问题, 我觉得这个确实是通用性很高

  1. 恩。新名字可以。 要不要加01呢。 这个规则只处理字符类型, 并没有处理金额等数字类型。
  2. 正则一开始我是放开的。 我现在放开吧。
LeoQuote commented 3 months ago

不用加01,你预留的槽位可以再加 01,02 一直到10

LeoQuote commented 3 months ago

可以考虑适配下数字类型?

feiazifeiazi commented 3 months ago

不用加01,你预留的槽位可以再加 01,02 一直到10

懵了。“model里预留几个槽位” 这句话不明白意思了。get不到点。

如果放开正则,正则配置是在“脱敏规则配置” 菜单里面配置的。

feiazifeiazi commented 3 months ago

可以考虑适配下数字类型?

数字类型,没有具体的需求哎。

可能需求:把数字 乘以一个随机数? 可能需求:把某一位数字变成*?

现在的代码把数字转为str类型,去脱敏了。 我在想这个通用规则要不要这样处理。 感觉需要加10个通用规则才行。

LeoQuote commented 3 months ago

不好意思, 我才关注到可以使用 脱敏规则设置和 脱敏字段配置 两个配置来结合, 配置脱敏规则, 那这样的话, 你当前的这个需求, 是不是可以直接用 其他 这个脱敏规则来实现?

脱敏字段配置时,支持对库名,表名使用*,不用再关心库名和表名,只用关心新增的敏感字段名,方便配置。

我建议本次 pr 先加这个功能, 然后你用 "其他" 这个规则进行关联.

如果你想扩展这个功能, 比如说可以设置无限个脱敏规则, 可以扩展 其中的 rule_type, 使其支持很多的规则, 欢迎后续再提 pr .

对于数字类型的字段, 我比较建议转换为文本然后再做实现.

feiazifeiazi commented 3 months ago

不好意思, 我才关注到可以使用 脱敏规则设置和 脱敏字段配置 两个配置来结合, 配置脱敏规则, 那这样的话, 你当前的这个需求, 是不是可以直接用 其他 这个脱敏规则来实现?

脱敏字段配置时,支持对库名,表名使用*,不用再关心库名和表名,只用关心新增的敏感字段名,方便配置。

我建议本次 pr 先加这个功能, 然后你用 "其他" 这个规则进行关联.

如果你想扩展这个功能, 比如说可以设置无限个脱敏规则, 可以扩展 其中的 rule_type, 使其支持很多的规则, 欢迎后续再提 pr .

对于数字类型的字段, 我比较建议转换为文本然后再做实现.

  1. 用“其他”这个规则实现不了需求。因为正则表达式必须要动态生成。
  2. 需要新加一个规则“其他2” (或者叫 三段式通用脱敏规则),正则需配置为"^([\s\S]{@Length01,}?)([\s\S]{@Length02,}?)([\s\S]{@Length03,}?)$",然后需要代码支持将正则中的@Length01,@Length02,@Length03 替换为真正的数字的。
feiazifeiazi commented 2 months ago

@LeoQuote 已修复,麻烦再看一下。2024-7-31

LeoQuote commented 2 months ago

rebase下到最新版,有冲突

feiazifeiazi commented 1 month ago

rebase下到最新版,有冲突

已rebase。为啥我本地没有显示冲突?好奇怪。