G03.04. Фильтры безопасности на уровне строк

Редактировал(а) Ирина Сафонова 22.03.2024, 15:21

Создание правила


При необходимости в пункте меню Безопасность на уровне строк создайте правила, которые назначаются конкретной БД и набору ролей.

1. Нажмите на кнопку Правило.

Кнопка добавления правила.PNG

2. В открывшемся окне заполните поля. 

Примечание.
Обязательные поля отмечены звездочкой.

ПолеКомментарий
Название правилаВведите наименование.
Тип фильтраРегулярные фильтры добавляют операторы where к запросам, если пользователь принадлежит к роли, на которую ссылается фильтр.

Базовые фильтры применяют фильтры ко всем запросам, кроме ролей, определенных в фильтре. Базовые фильтры используются для определения того, что пользователи могут видеть, если к ним не применяются фильтры RLS в группе фильтров.
ДатасетыВыберите один или несколько датасетов из списка.
РолиВыберите одну или несколько из списка.
Для регулярных фильтров это роли, к которым применяются данный фильтр. Для базовых фильтров это роли, к которым фильтр НЕ применяется, например, Администратор, если администратор должен видеть всю информацию.
Групповой ключФильтры с тем же групповым ключом объединяются операцией OR внутри группы, в то время как разные группы фильтров — операцией AND. Неопределенные групповые ключи считаются уникальными группами, то есть не объединяются вместе. Например, если в таблице три фильтра, из которых два относятся к отделам Finance и Marketing (групповый ключ = 'department'), а один — к региону Europe (групповый ключ = 'region'), условие фильтра применяет фильтр (department = 'Finance' ИЛИ department = 'Marketing') И (region = 'Europe').
Групповой ключФильтры с тем же групповым ключом объединяются операцией OR внутри группы, в то время как разные группы фильтров — операцией AND. Неопределенные групповые ключи считаются уникальными группами, то есть не объединяются вместе. Например, если в таблице три фильтра, из которых два относятся к отделам Finance и Marketing (групповый ключ = 'department'), а один — к региону Europe (групповый ключ = 'region'), условие применяет фильтр (department = 'Finance' OR department = 'Marketing') И (region = 'Europe').
ОператорУсловие, которое добавляется к оператору WHERE. Например, чтобы возвращать строки только для определенного клиента, определите обычный фильтр с условием `client_id = 9`. Чтобы не отображать строки, если пользователь не принадлежит к роли фильтра RLS, создайте базовый фильтр с предложением `1 = 0` (всегда false).

3. Сохраните правило.

Кнопка сохранения в карточке правила.PNG

Фильтрация в реестре правил


В реестре доступна фильтрация по:

  • имени,
  • типу фильтра,
  • групповому ключу.

Фильтрация правил.PNG

Прочие действия


Доступно:

  • удаление и редактирование правил,
  • множественный выбор правил.

Пример настройки


Используя фильтры безопасности на уровне строк в меню пункте меню Безопасность, при необходимости создайте фильтры, которые назначаются конкретной таблице и набору ролей. Если хотите, чтобы члены финансовой группы имели доступ только к строкам, в которых department = "finance", сделайте следующее:

1. Создайте фильтр безопасности на уровне строк с department = "finance".

2. Назначьте предложение роли Финансы и таблице, к которой оно применяется.

3. Поле предложения, которое может содержать произвольный текст, добавьте к предложению WHERE сгенерированного оператора SQL. Таким образом, вы даже можете настроить фильтр За последние 30 дней и применить его к определенной роли с таким предложением, как date_field > DATE_SUB(NOW(), INTERVAL 30 DAY). Фильтр поддерживает несколько условий: client_id = 6 И advertiser="foo" и так далее.

Все соответствующие фильтры безопасности на уровне строк объединяются вместе — внутри различные предложения SQL объединяются с помощью операторов AND. Это означает, что можно создать ситуацию, когда две роли конфликтуют таким образом, что подмножество таблиц может быть пустым. Например, фильтры client_id=4 и client_id=5, примененные к роли, приведут к тому, что пользователи этой роли будут иметь client_id=4 и client_id=5, добавленные к их запросу, что никогда не может быть истиной.

В начало 🡱
К следующему разделу 🡲
К предыдущему разделу 🡰