动态脱敏策略(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)的详细命令,请查阅: