G03.04. Фильтры безопасности на уровне строк
Создание правила
При необходимости в пункте меню Безопасность на уровне строк создайте правила, которые назначаются конкретной БД и набору ролей.
1. Нажмите на кнопку Правило.
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. Сохраните правило.
Фильтрация в реестре правил
В реестре доступна фильтрация по:
- имени,
- типу фильтра,
- групповому ключу.
Прочие действия
Доступно:
- удаление и редактирование правил,
- множественный выбор правил.
Пример настройки
Используя фильтры безопасности на уровне строк в меню пункте меню Безопасность, при необходимости создайте фильтры, которые назначаются конкретной таблице и набору ролей. Если хотите, чтобы члены финансовой группы имели доступ только к строкам, в которых 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, добавленные к их запросу, что никогда не может быть истиной.