Управление доступом на уровне строк данных (RLS)
RLS (Row-level security — безопасность на уровне строк) позволяет ограничить доступ к данным для пользователей в рамках одного датасета. Например, вы можете разграничить доступ разным клиентам.
Важно
-
При использовании RLS ограничьте доступ к подключению с помощью права доступа
Исполнение
. Это исключит возможность изменить права доступа к строкам, а также открыть окно предпросмотра данных или создать новый датасет на основе подключения. -
В RLS поддерживается разграничение доступа только для строковых значений.
Разграничить доступ к данным на уровне строк можно как в датасете, так и в источнике данных.
Настройка RLS на уровне датасета
Вы можете разграничить доступ к любому измерению датасета. Каждому пользователю могут быть выданы права на неограниченное количество значений измерений.
Разграничение определяется конфигурацией доступа, которая выглядит следующим образом:
'значение_1': пользователь_1, пользователь_2
'значение_2': пользователь_3
'значение_3': пользователь_1, пользователь_2, пользователь_3
Например, чтобы настроить доступ пользователя к значению first-company
поля Company name
, задайте конфигурацию:
'first-company': login-to-access-your-row-data@yandex.ru
Чтобы настроить доступ для нескольких пользователей, перечислите через запятую их аккаунты в конфигурации доступа:
'first-company': login1-to-access-your-row-data@yandex.ru, login2-to-access-your-row-data@yandex.ru, login3-to-access-your-row-data@yandex.ru
Значения и пользователей можно определять символом подстановки:
-
Пользователям
пользователь_1
ипользователь_2
доступны все значения поля*: пользователь_1, пользователь_2
Например, чтобы настроить доступ для пользователей ко всем значениям поля
Company name
, задайте конфигурацию:*: login1-to-access-your-row-data@yandex.ru, login2-to-access-your-row-data@yandex.ru
-
Значение
значение_1
доступно всем пользователям'значение_1': *
Например, чтобы разрешить доступ для всех пользователей к значению
first-company
поляCompany name
, задайте конфигурацию:'first-company': *
Кавычки в значении задаются удвоением:
'значение в ''кавычках''': пользователь_1, пользователь_2
Например, чтобы установить кавычки для названия компании first-company "Example"
поля Company name
, задайте конфигурацию:
'first-company ''Example''': login1-to-access-your-row-data@yandex.ru, login2-to-access-your-row-data@yandex.ru
Также можно использовать символ "
:
'first-company "Example"': login1-to-access-your-row-data@yandex.ru, login2-to-access-your-row-data@yandex.ru
При использовании RLS запросы к датасету проходят через следующий фильтр:
where измерение in (значение_1, значение_2 ... значение_N)
Настройка RLS на уровне источника данных
Настройка RLS на уровне датасета предполагает его редактирование при каждом изменении настроек RLS.
Чтобы избежать этого, можно перенести логику разграничения прав доступа на уровне строк на сторону источника данных:
-
В исходные данные добавьте новое поле для хранения id пользователя. По этому полю будет происходить фильтрация всех запросов в источник.
Свой id можно посмотреть по ссылке
. Если вам нужен id другого пользователя, попросите его открыть эту ссылку и передать id вам. -
Для каждой строки исходных данных укажите id пользователя, которому должна быть доступна данная строка. Если к одной строке должен быть доступ для нескольких пользователей, то логику разграничения можно вынести в отдельную таблицу и объединить ее с основной таблицей на уровне датасета.
-
В датасете в поле с id в настройках RLS введите
userid:userid
. Переменнуюuserid
можно использовать в сочетании с обычным типом RLS в датасете:'значение_1': пользователь_1, пользователь_2 'значение_2': пользователь_3 userid:userid
Примечание
Перенос логики RLS на сторону источника возможен для источников, в которых доступно изменение структуры данных. В Metrica и AppMetrica структура данных закрыта, поэтому этот способ неприменим.
Как изменить права доступа к строке в датасете
Чтобы настроить права доступа к значению строки данных:
-
Откройте датасет.
-
В правой части строки нажмите значок
и выберите Права доступа. -
Введите значение поля и пользователей в указанном формате и нажмите Сохранить.
'значение_1': пользователь_1, пользователь_2 'значение_2': пользователь_3
Например, чтобы настроить доступ к значению
first-company
для поляCompany name
:'first-company': login-to-access-your-row-data@yandex.ru
-
Сохраните датасет.
- Добавьте в источнике поле с id пользователей, по которому будет осуществляться фильтрация. Вы можете добавить это поле в новую таблицу и присоединить ее с помощью оператора
JOIN
. - Добавьте поле в датасет.
- Откройте датасет.
- В правой части строки нажмите значок
и выберите Права доступа. - В настройках прав доступа к полю допишите
userid:userid
и нажмите Сохранить. - Сохраните датасет.
Построим дашборд по данным продаж в разрезе 4 регионов (Запад, Восток, Север, Юг). Каждый региональный менеджер должен иметь доступ только к своим данным, руководитель компании ко всем.
1. Определим id для пользователей.
2. Создадим в источнике дополнительную таблицу MANAGER_ID
, в которой регион соотносится с id пользователя. Если для одного id доступны несколько регионов, то перечислим все уникальные пары:
REGION | MANAGER_NAME | MANAGER_ID |
---|---|---|
Запад | Аркадий | 19287318273912873 |
Восток | Василий | 92877912837318927 |
Север | Ольга | 02993284928374346 |
Юг | Дмитрий | 10836293849237642 |
Запад | Максим | 71726123712891283 |
Восток | Максим | 71726123712891283 |
Север | Максим | 71726123712891283 |
Юг | Максим | 71726123712891283 |
3. Добавим таблицу в датасет.
4. Выполним JOIN
по полю REGION
.
5. По полю MANAGER_ID
настраиваем RLS и добавляем userid:userid
.
Чтобы изменить разграничение прав доступа, обновите данные в таблице источника.