动态脱敏

动态脱敏对敏感列(手机号、身份证、银行卡等)按用户角色自动脱敏展示,数据本身不变,不同角色看到不同的展示形式。

工作原理

查询时,系统根据当前用户的角色动态替换敏感列的显示值:

  • 有权限的角色(如数据管理员):看到完整数据
  • 无权限的角色(如普通分析师):看到脱敏后的数据(如
    138****8888
    138****8888

数据在存储层不变,脱敏只发生在查询结果返回时。

快速示例

-- 创建脱敏函数:手机号中间4位替换为 **** CREATE FUNCTION phone_mask(val STRING) RETURNS STRING -> CASE WHEN array_contains(current_roles(), 'workspace_admin') THEN val ELSE REGEXP_REPLACE(val, '(\\d{3})\\d{4}(\\d{4})', '$1****$2') END; -- 将脱敏函数绑定到列(建表时) CREATE TABLE users ( id INT, phone STRING MASK phone_mask ); -- 绑定到已有表的列 ALTER TABLE users CHANGE COLUMN phone SET MASK phone_mask;

与视图的区别

方式控制粒度效果
动态脱敏列级数据可见但部分隐藏(如
138****8888
138****8888
),按角色自动脱敏
视图列级/行级通过 SELECT 过滤隐藏列或行,需手动创建和维护

相关文档

联系我们
预约咨询
微信咨询
电话咨询