仅限 ClickHouse Cloud
创建脱敏策略,使其能够在特定用户或角色查询表时,动态转换或屏蔽列值。
语法:
CREATE MASKING POLICY [IF NOT EXISTS | OR REPLACE] policy_name ON [database.]table
UPDATE column1 = expression1 [, column2 = expression2 ...]
[WHERE condition]
TO {role1 [, role2 ...] | ALL | ALL EXCEPT role1 [, role2 ...]}
[PRIORITY priority_number]UPDATE 子句
UPDATE 子句用于指定要对哪些列进行脱敏,以及采用何种转换方式。你可以在单个策略中对多个列进行脱敏。
示例:
- 简单脱敏:
UPDATE email = '***masked***' - 部分脱敏:
UPDATE email = concat(substring(email, 1, 3), '***@***.***') - 基于哈希的脱敏:
UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8)) - 多列:
UPDATE email = '***@***.***', phone = '***-***-****'
WHERE 子句
可选的 WHERE 子句允许根据行中的值按条件进行脱敏处理。只有满足条件的行才会应用脱敏处理。
示例:
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;TO 子句
在 TO 部分中,指定该策略适用于哪些用户和角色。
TO user1, user2:适用于特定用户/角色TO ALL:适用于所有用户TO ALL EXCEPT user1, user2:适用于除指定用户外的所有用户
PRIORITY 子句
当多个脱敏策略对同一用户的同一列生效时,PRIORITY 子句用于确定其应用顺序。策略会按照优先级从高到低依次应用。
默认优先级为 0。优先级相同的策略会以未定义的顺序应用。
示例:
-- Applied second (lower priority)
CREATE MASKING POLICY mask1 ON users
UPDATE email = 'low@priority.com'
TO analyst
PRIORITY 1;
-- Applied first (higher priority)
CREATE MASKING POLICY mask2 ON users
UPDATE email = 'high@priority.com'
TO analyst
PRIORITY 10;
-- analyst sees 'low@priority.com' because it's applied last