跳到主要内容

动态脱敏策略(Masking Policy)

企业版功能
MASKING POLICY是企业版功能。 如需获取许可证,请联系 Databend 支持团队

动态脱敏策略(Masking Policy)在查询执行期间动态转换列值,从而保护敏感数据。它实现基于角色的机密信息访问:授权用户看到真实数据,其他用户则看到脱敏后的值。

工作原理

动态脱敏策略(Masking Policy)根据当前用户的角色,对列数据应用转换表达式:

对于 managers:

id | email           |
---|-----------------|
2 | eric@example.com|
1 | sue@example.com |

对于其他用户:

id | email    |
---|----------|
2 | *********|
1 | *********|

关键特性

  • 查询时脱敏:策略仅在 SELECT 操作期间转换数据
  • 基于角色:访问规则依赖当前用户的角色,通过 current_role() 判断
  • 列级粒度:作用于特定表列
  • 可复用:一个策略可保护不同表中的多个列
  • 非侵入式:原始数据在存储中保持不变

读操作与写操作

重要:动态脱敏策略(Masking Policy)仅作用于读操作(SELECT 查询)。写操作(INSERT、UPDATE、DELETE)始终处理原始、未脱敏的数据,从而确保:

  • 查询结果按用户权限受到保护
  • 应用程序可存储并修改真实数据值
  • 底层存储的数据完整性得以保持

快速入门

1. 创建动态脱敏策略(Masking Policy)

CREATE MASKING POLICY email_mask
AS (val STRING)
RETURNS STRING ->
CASE
WHEN current_role() IN ('MANAGERS') THEN val
ELSE '*********'
END;

2. 应用到表列

ALTER TABLE user_info MODIFY COLUMN email SET MASKING POLICY email_mask;

3. 测试策略

-- 创建测试数据
CREATE TABLE user_info (id INT, email STRING NOT NULL);
INSERT INTO user_info VALUES (1, 'user@example.com');

-- 以不同角色查询,观察脱敏效果
SELECT * FROM user_info;

前提条件

  • 创建策略前,先定义用户角色及其访问权限
  • 确保用户已分配适当角色
  • 角色管理请参考 User & Role

策略管理

有关创建、修改和管理动态脱敏策略(Masking Policy)的详细命令,请查阅: