RLS (Row-level security — безопасность на уровне строк) позволяет ограничить доступ к данным для пользователей или группы пользователей в рамках одного датасета. Например, вы можете разграничить доступ разным клиентам.
Важно
При использовании RLS ограничьте доступ к подключению с помощью права доступа Исполнение. Это исключит возможность изменить права доступа к строкам, а также открыть окно предпросмотра данных или создать новый датасет на основе подключения.
В RLS поддерживается разграничение доступа только для строковых значений.
Ограничения RLS действуют на строки целиком, а не только на поля, по которым задается разграничение доступа.
Вы можете разграничить доступ к любому измерению датасета. Каждому пользователю или группе пользователей могут быть выданы права на неограниченное количество значений измерений.
При использовании RLS запросы к датасету проходят через следующий фильтр:
where измерение in (значение_1, значение_2 ... значение_N)
Вы можете настроить доступ к строкам с помощью интерфейса или задать конфигурацию в формате JSON:
В интерфейсе
JSON
Откройте датасет и перейдите на вкладку Поля.
Для поля, которому требуется настроить доступ, нажмите значок или → Права доступа.
В открывшемся окне на вкладке Таблица нажмите кнопку Добавить правило и укажите:
Кому разрешен доступ:
Пользователи и группы — доступ будет предоставлен указанным пользователям и группам. Можно воспользоваться поиском по имени, логину или почте пользователя.
Все пользователи — доступ будет предоставлен всем пользователям.
allowed_value — доступ будет предоставлен ко всем строкам с указанным значением в поле. Значение указывается, только если для pattern_type указано значение value, иначе — null;
pattern_type — как будет предоставлен доступ:
value — для определенного значения поля, указанного в поле allowed_value;
all — для любых значений поля. В этом случае значение allowed_value должно быть равно null;
subject_id — идентификатор пользователя или группы, которым будет предоставлен доступ. При значении subject_type равном all указывается *, а равном userid — пустое значение;
subject_name — имя пользователя, которому будет предоставлен доступ. При значении subject_type равном all указывается *, а равном userid — значение userid;
subject_type — кому будет предоставлен доступ:
user — пользователю. В этом случае в subject_id и subject_name указываются идентификатор и имя пользователя соответственно;
group — группе пользователей. В этом случае в subject_id и subject_name указываются идентификатор и имя группы соответственно;
all — всем. В этом случае в subject_id и subject_name указывается *;
Настройка RLS на уровне датасета предполагает его редактирование при каждом изменении настроек RLS.
Чтобы избежать этого, можно перенести логику разграничения прав доступа на уровне строк на сторону источника данных:
В исходные данные добавьте новое поле для хранения ID пользователя. По этому полю будет происходить фильтрация всех запросов в источник.
Свой ID можно посмотреть в параметрах своей учетной записи. Если вам нужен ID другого пользователя, попросите его посмотреть свою учетную запись и передать ID вам.
Для каждой строки исходных данных укажите ID пользователя, которому должна быть доступна данная строка. Если к одной строке должен быть доступ для нескольких пользователей, то логику разграничения можно вынести в отдельную таблицу и объединить ее с основной таблицей на уровне датасета.
В датасете настройте доступ к полю с ID пользователей:
В интерфейсе
JSON
В окне настроек RLS на вкладке Таблица нажмите кнопку Добавить правило.
Для параметра Кому разрешён доступ выберите Идентификаторы пользователей.
Настройка RLS по идентификатору пользователя
Нажмите кнопку Сохранить.
В окне настроек RLS на вкладке JSON задайте конфигурацию RLS в формате JSON: