Oracle SQL实现字符串中SSN与DOB字段动态脱敏的问题咨询
动态脱敏SQL修改方案
核心问题定位
你原有SQL的问题在于正则把ssn和dob的匹配规则绑定为连续出现,自然无法处理两者中间存在其他字符串的场景。我们可以拆分两类敏感内容的匹配逻辑,分别做替换即可实现需求。
实现思路
- 分别匹配SSN、DOB两类敏感前缀及后续的敏感内容,两次调用
REGEXP_REPLACE做独立替换,互不干扰,天然支持中间存在任意普通字符串的场景 - 匹配规则对齐你的示例输出:
- SSN规则:匹配
ssn开头加后续紧跟的连续数字,整体替换为等长星号 - DOB规则:匹配
dob开头加后续的空格、日期数字、横杠组合,整体替换为等长星号
- SSN规则:匹配
修改后SQL代码
SELECT REGEXP_REPLACE( REGEXP_REPLACE(raw_str, 'ssn\d+', RPAD('*', LENGTH(REGEXP_SUBSTR(raw_str, 'ssn\d+')), '*')), 'dob\s*[0-9\-]+', RPAD('*', LENGTH(REGEXP_SUBSTR(raw_str, 'dob\s*[0-9\-]+')), '*') ) AS masked_value FROM ( -- 此处替换为你的实际表和字符串列,这里用测试数据做示例 SELECT 'This is ssn12345 string dob 12-09-1998 string' AS raw_str FROM dual UNION ALL SELECT 'This is ssn12345786 stringabc string' AS raw_str FROM dual ) test_data;
输出验证
执行上述SQL得到的结果和你给出的预期输出完全一致:
This is ******** string ************** stringThis is *********** stringabc string
内容的提问来源于stack exchange,提问作者EX08
相关产品推荐
相关产品推荐

