Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

CREATE 脱敏策略

仅限 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
Navigation