> ## 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 MASKING POLICY

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>
  행 정책(row policies)과 달리, 마스킹 정책(masking policies)은 정책이 적용되지 않는 사용자에게는 영향을 주지 않습니다. 사용자에게 적용되는 마스킹 정책이 없으면 원본 데이터를 보게 됩니다.
</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>
  **성능 고려 사항**

  * 마스킹 정책은 표현식의 복잡도에 따라 쿼리 성능에 영향을 미칠 수 있습니다
  * 활성화된 마스킹 정책이 있는 테이블(table)에서는 일부 최적화가 비활성화될 수 있습니다
</Info>
