动态脱敏
动态脱敏对敏感列(手机号、身份证、银行卡等)按用户角色自动脱敏展示,数据本身不变,不同角色看到不同的展示形式。
工作原理
查询时,系统根据当前用户的角色动态替换敏感列的显示值:
- 有权限的角色(如数据管理员):看到完整数据
- 无权限的角色(如普通分析师):看到脱敏后的数据(如
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 过滤隐藏列或行,需手动创建和维护 |
相关文档