Перейти к содержимому
Последнее обновление

CREATE ROW POLICY

Описание​

Создаёт политику безопасности на уровне строк для таблицы. Политика ограничивает строки, доступные указанным пользователям или ролям, с помощью предиката фильтрации, который применяется к запросам к таблице.

Синтаксис​

CREATE ROW POLICY [ IF NOT EXISTS ] <policy_name> 
ON <table_name>
AS { RESTRICTIVE | PERMISSIVE }
TO { <user_name> | ROLE <role_name> }
USING (<filter>);

Обязательные параметры​

<policy_name>

Имя политики безопасности на уровне строк

<table_name>

Имя таблицы

<filter_type>

RESTRICTIVE объединяет набор политик с помощью AND, а PERMISSIVE объединяет набор политик с помощью OR

Эквивалентно условию фильтрации в запросе, например: id=1

Необязательные параметры​

<user_name>

Имя пользователя; политику нельзя создать для пользователей root и admin

<role_name>

Имя роли

Требования к управлению доступом​

Пользователь, выполняющий эту команду SQL, должен обладать как минимум следующими привилегиями:

ПривилегияОбъектПримечания
ADMIN_PRIV или GRANT_PRIVГлобальный

Примеры​

  1. Создание набора политик безопасности на уровне строк
CREATE ROW POLICY test_row_policy_1 ON test.table1 
AS RESTRICTIVE TO test USING (c1 = 'a');
CREATE ROW POLICY test_row_policy_2 ON test.table1
AS RESTRICTIVE TO test USING (c2 = 'b');
CREATE ROW POLICY test_row_policy_3 ON test.table1
AS PERMISSIVE TO test USING (c3 = 'c');
CREATE ROW POLICY test_row_policy_3 ON test.table1
AS PERMISSIVE TO test USING (c4 = 'd');

При выполнении запроса к table1 переписанный SQL выглядит так:

SELECT * FROM (SELECT * FROM table1 WHERE (c1 = 'a' AND c2 = 'b') AND (c3 = 'c' OR c4 = 'd'))