> ## 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>
  В отличие от политик доступа к строкам, политики маскирования не влияют на пользователей, к которым они не применяются. Если к пользователю не применяется ни одна политика маскирования, он видит исходные данные.
</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>
