Управление доступом на уровне строк данных (RLS)
RLS (Row-level security — безопасность на уровне строк) позволяет ограничить доступ к данным для пользователей или группы пользователей в рамках одного датасета. Например, вы можете разграничить доступ разным клиентам.
Важно
-
При использовании RLS ограничьте доступ к подключению с помощью права доступа
Исполнение. Это исключит возможность изменить права доступа к строкам, а также открыть окно предпросмотра данных или создать новый датасет на основе подключения. -
В RLS поддерживается разграничение доступа только для строковых значений.
-
Ограничения RLS действуют на строки целиком, а не только на поля, по которым задается разграничение доступа.
Разграничить доступ к данным на уровне строк можно как в датасете, так и в источнике данных.
Настройка RLS на уровне датасета
Вы можете разграничить доступ к любому измерению датасета. Каждому пользователю или группе пользователей могут быть выданы права на неограниченное количество значений измерений.
При использовании RLS запросы к датасету проходят через следующий фильтр:
where измерение in (значение_1, значение_2 ... значение_N)
Настройка RLS на уровне источника данных
Настройка RLS на уровне датасета предполагает его редактирование при каждом изменении настроек RLS.
Чтобы избежать этого, можно перенести логику разграничения прав доступа на уровне строк на сторону источника данных:
-
В исходные данные добавьте новое поле для хранения ID пользователя DataLens. По этому полю будет происходить фильтрация всех запросов в источник.
Свой ID можно посмотреть по ссылке
. Если вам нужен ID другого пользователя, попросите его открыть эту ссылку и передать ID вам. -
Для каждой строки исходных данных укажите ID пользователя DataLens, которому должна быть доступна данная строка. Если к одной строке должен быть доступ у нескольких пользователей, то логику разграничения можно вынести в отдельную таблицу и объединить ее с основной таблицей на уровне датасета.
-
В датасете настройте доступ к полю с ID пользователей:
В интерфейсеJSON-
В окне настроек RLS на вкладке Таблица нажмите кнопку Добавить правило.
-
Для параметра Кому разрешён доступ выберите
Идентификаторы пользователей.Настройка RLS по идентификатору пользователя

-
Нажмите кнопку Сохранить.
-
В окне настроек RLS на вкладке JSON задайте конфигурацию RLS в формате JSON:
[ { "allowed_value": null, "pattern_type": "userid", "subject": { "subject_id": "", "subject_name": "userid", "subject_type": "userid" }, } ] -
Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с указанными в поле идентификаторами.
-
-
Сохраните датасет.
Примечание
Перенос логики RLS на сторону источника возможен для источников, в которых доступно изменение структуры данных. В Metrica и AppMetrica структура данных закрыта, поэтому этот способ неприменим.
Как изменить права доступа к строке в датасете
Чтобы настроить права доступа к строкам данных:
-
Откройте датасет.
-
Перейдите на вкладку Поля.
-
В правой части строки нажмите значок
и выберите Права доступа. -
В открывшемся окне задайте права доступа к полю:
В интерфейсеJSON-
На вкладке Таблица нажмите кнопку Добавить правило и укажите пользователей, группы или
Все пользователии значение поля. Например, чтобы настроить для пользователя доступ ко всем строкам со значениемfirst-company:- Кому разрешён доступ — выберите пользователя.
- Значения поля — введите
first-company.
-
Нажмите кнопку Сохранить.
-
На вкладке JSON задайте конфигурацию RLS в формате JSON. Например, чтобы настроить для пользователя доступ ко всем строкам со значением
first-company:[ { "allowed_value": "first-company", "pattern_type": "value", "subject": { "subject_id": "ssxiy********", "subject_name": "user:ssxiy********", "subject_type": "user" } } ] -
Нажмите кнопку Сохранить.
-
-
Сохраните датасет.
-
Добавьте в источнике поле с ID пользователей DataLens, по которому будет осуществляться фильтрация. Вы можете добавить это поле в новую таблицу и присоединить ее с помощью оператора
JOIN. -
Добавьте поле с ID пользователей в датасет:
- Если вы добавили поле в существующую таблицу, в датасете перейдите на вкладку Поля и в верхней части экрана нажмите кнопку Обновить поля. Поле с ID пользователей появится в списке.
- Если вы добавили поле в новую таблицу, присоедините ее с помощью оператора
JOIN. Для этого в датасете перейдите на вкладку Источники и перетащите новую таблицу в рабочую область. Таблица автоматически свяжется с существующей. Если надо, поправьте связь между таблицами и удалите дубликаты полей, получившиеся в результате соединения таблиц.
-
Настройте права доступа к полю:
-
В датасете перейдите на вкладку Поля.
-
Найдите поле с ID пользователей. В правой части строки нажмите значок
и выберите Права доступа. -
В открывшемся окне задайте права доступа к полю:
В интерфейсеJSON- В окне настроек RLS на вкладке Таблица нажмите кнопку Добавить правило.
- Для параметра Кому разрешён доступ выберите
Идентификаторы пользователей. - Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с идентификаторами, указанными в поле.
-
В окне настроек RLS на вкладке JSON задайте конфигурацию RLS в формате JSON:
[ { "allowed_value": null, "pattern_type": "userid", "subject": { "subject_id": "", "subject_name": "userid", "subject_type": "userid" }, } ] -
Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с идентификаторами, указанными в поле.
-
-
Сохраните датасет.
Пример
Построим дашборд по данным продаж в разрезе 4 регионов (Запад, Восток, Север, Юг). Каждый региональный менеджер должен иметь доступ только к своим данным, руководитель компании — ко всем.
-
Определим ID для пользователей DataLens.
-
Создадим в источнике дополнительную таблицу
MANAGER_ID, в которой регион соотносится с ID пользователя. Если для одного ID доступны несколько регионов, то перечислим все уникальные пары:REGION MANAGER_NAME MANAGER_ID Запад Аркадий 19287318273912873 Восток Василий 92877912837318927 Север Ольга 02993284928374346 Юг Дмитрий 10836293849237642 Запад Максим 71726123712891283 Восток Максим 71726123712891283 Север Максим 71726123712891283 Юг Максим 71726123712891283 -
Откроем датасет и добавим новую таблицу: на вкладке Источники перетащим таблицу в рабочую область.
-
Убедимся, что связь
JOINустановлена по полюREGION.
-
По полю
MANAGER_IDнастраиваем RLS.В интерфейсеJSON

Каждый пользователь будет видеть данные только того региона, для которого ему настроен доступ.
Чтобы изменить разграничение прав доступа, обновите данные в таблице источника.