Управление доступом на уровне строк данных (RLS)
RLS (Row-level security — безопасность на уровне строк) позволяет ограничить доступ к данным для пользователей или группы пользователей в рамках одного датасета. Например, вы можете разграничить доступ разным клиентам.
Важно
-
При использовании RLS ограничьте доступ к подключению с помощью права доступа
Исполнение
. Это исключит возможность изменить права доступа к строкам, а также открыть окно предпросмотра данных или создать новый датасет на основе подключения. -
В RLS поддерживается разграничение доступа только для строковых значений.
Разграничить доступ к данным на уровне строк можно как в датасете, так и в источнике данных.
Настройка RLS на уровне датасета
Вы можете разграничить доступ к любому измерению датасета. Каждому пользователю или группе пользователей могут быть выданы права на неограниченное количество значений измерений.
При использовании RLS запросы к датасету проходят через следующий фильтр:
where измерение in (значение_1, значение_2 ... значение_N)
Доступ для пользователей
Разграничение для пользователей определяется конфигурацией доступа, которая выглядит следующим образом:
'значение_1': пользователь_1, пользователь_2
'значение_2': пользователь_3
'значение_3': пользователь_1, пользователь_2, пользователь_3
Например, чтобы настроить доступ пользователя user-login
к значению first-company
поля Company name
, задайте конфигурацию:
'first-company': user-login@yandex.ru
Чтобы настроить доступ для нескольких пользователей, перечислите через запятую их аккаунты в конфигурации доступа:
'first-company': user-login-1@yandex.ru, user-login-2@yandex.ru, user-login-3@yandex.ru
Доступ для групп пользователей
Разграничение для групп пользователей определяется конфигурацией доступа, которая выглядит следующим образом:
'значение_1': @group:название_группы_1
'значение_2': @group:название_группы_1, @group:название_группы_2
В конфигурации указывается название группы, а не ее идентификатор. Если группа будет переименована, конфигурацию RLS для нее нужно будет также обновить.
Например, чтобы настроить доступ группы пользователей с именем group-name
к значению first-company
поля Company name
, задайте конфигурацию:
'first-company': @group:group-name
Чтобы настроить доступ для нескольких групп пользователей, перечислите их через запятую в конфигурации доступа:
'first-company': @group:group-name-1, @group:group-name-2, @group:group-name-3
Можно одновременно настроить доступ для пользователей и групп:
'first-company': user-login-1@yandex.ru, user-login-2@yandex.ru, @group:group-name-1, @group:group-name-2
Подстановки и кавычки в конфигурации RLS
Значения, пользователей и названия групп можно определять символом подстановки:
-
Пользователям
пользователь_1
,пользователь_2
и группеназвание_группы_1
доступны все значения поля*: пользователь_1, пользователь_2, @group:название_группы_1
Например, чтобы настроить доступ ко всем значениям поля
Company name
, задайте конфигурацию:*: user-login-1@yandex.ru, @group:group-name-1
-
Значение
значение_1
доступно всем пользователям и группам'значение_1': *
Например, чтобы разрешить доступ для всех пользователей и групп к значению
first-company
поляCompany name
, задайте конфигурацию:'first-company': *
Кавычки в значении задаются удвоением:
'значение в ''кавычках''': пользователь_1, пользователь_2
Например, чтобы установить кавычки для названия компании first-company "Example"
поля Company name
, задайте конфигурацию:
'first-company ''Example''': user-login-1@yandex.ru, @group:group-name-1
Также можно использовать символ "
:
'first-company "Example"': user-login-1@yandex.ru, @group:group-name-1
Настройка 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
.
Чтобы изменить разграничение прав доступа, обновите данные в таблице источника.