> ## Documentation Index
> Fetch the complete documentation index at: https://private-7c7dfe99-fix-nav-issues.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

> 脱敏策略文档

# CREATE 脱敏策略

export const CloudOnlyBadge = () => {
  return <div className="cloudBadge">
            <div className="cloudIcon">
            <svg width="16" height="16" viewBox="0 0 16 16" fill="none" xmlns="http://www.w3.org/2000/svg">
                <path fillRule="evenodd" clipRule="evenodd" d="M5.33395 12.6667H12.3739C13.6593 12.6667 14.7073 11.6187 14.7073 10.3334C14.7073 9.04804 13.6593 8.00004 12.3739 8.00004H12.0839V7.33337C12.0839 5.12671 10.2906 3.33337 8.08395 3.33337C6.09928 3.33337 4.45395 4.78537 4.14195 6.68204C2.55728 6.76271 1.29395 8.06204 1.29395 9.66671C1.29395 11.3234 2.63728 12.6667 4.29395 12.6667H5.33395Z" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
            </svg>
        </div>
            {'ClickHouse Cloud only'}
        </div>;
};

创建脱敏策略，使其能够在特定用户或角色查询表时，动态转换或屏蔽列值。

<Tip>
  脱敏策略可在不修改已存储数据的情况下，于查询时对敏感数据进行转换，从而提供列级数据安全保护。
</Tip>

语法：

```sql theme={null}
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]
```

<div id="update-clause">
  ## UPDATE 子句
</div>

`UPDATE` 子句用于指定要对哪些列进行脱敏，以及采用何种转换方式。你可以在单个策略中对多个列进行脱敏。

示例：

* 简单脱敏：`UPDATE email = '***masked***'`
* 部分脱敏：`UPDATE email = concat(substring(email, 1, 3), '***@***.***')`
* 基于哈希的脱敏：`UPDATE email = concat('masked_', substring(hex(cityHash64(email)), 1, 8))`
* 多列：`UPDATE email = '***@***.***', phone = '***-***-****'`

<div id="where-clause">
  ## WHERE 子句
</div>

可选的 `WHERE` 子句允许根据行中的值按条件进行脱敏处理。只有满足条件的行才会应用脱敏处理。

示例：

```sql theme={null}
CREATE MASKING POLICY mask_high_salaries ON employees
UPDATE salary = 0
WHERE salary > 100000
TO analyst;
```

<div id="to-clause">
  ## TO 子句
</div>

在 `TO` 部分中，指定该策略适用于哪些用户和角色。

* `TO user1, user2`：适用于特定用户/角色
* `TO ALL`：适用于所有用户
* `TO ALL EXCEPT user1, user2`：适用于除指定用户外的所有用户

<Note>
  与行策略不同，脱敏策略不会影响未被应用该策略的用户。如果某个用户不适用任何脱敏策略，则会看到原始数据。
</Note>

<div id="priority-clause">
  ## PRIORITY 子句
</div>

当多个脱敏策略对同一用户的同一列生效时，`PRIORITY` 子句用于确定其应用顺序。策略会按照优先级从高到低依次应用。

默认优先级为 0。优先级相同的策略会以未定义的顺序应用。

示例：

```sql theme={null}
-- 第二个应用（优先级较低）
CREATE MASKING POLICY mask1 ON users
UPDATE email = 'low@priority.com'
TO analyst
PRIORITY 1;

-- 第一个应用（优先级较高）
CREATE MASKING POLICY mask2 ON users
UPDATE email = 'high@priority.com'
TO analyst
PRIORITY 10;

-- analyst 看到的是 'low@priority.com'，因为该策略最后被应用
```

<Info>
  **性能注意事项**

  * 脱敏策略对查询性能的影响取决于表达式的复杂度
  * 对于启用了脱敏策略的表，某些优化可能会被禁用
</Info>
