Создаёт политику маскирования, которая позволяет динамически преобразовывать или маскировать значения столбцов для определённых пользователей или ролей при выполнении запроса к таблице.
Синтаксис:
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