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 пользователя DataLens. По этому полю будет происходить фильтрация всех запросов в источник.
Свой ID можно посмотреть в параметрах своей учетной записи. Если вам нужен ID другого пользователя, попросите его посмотреть свою учетную запись и передать ID вам.
Для каждой строки исходных данных укажите ID пользователя DataLens, которому должна быть доступна данная строка. Если к одной строке должен быть доступ у нескольких пользователей, то логику разграничения можно вынести в отдельную таблицу и объединить ее с основной таблицей на уровне датасета.
В датасете настройте доступ к полю с ID пользователей:
В интерфейсе
JSON
В окне настроек RLS на вкладке Таблица нажмите кнопку Добавить правило.
Для параметра Кому разрешён доступ выберите Идентификаторы пользователей.
Настройка RLS по идентификатору пользователя
Нажмите кнопку Сохранить.
В окне настроек RLS на вкладке JSON задайте конфигурацию RLS в формате JSON:
В правой части строки нажмите значок и выберите Права доступа.
В открывшемся окне задайте права доступа к полю:
В интерфейсе
JSON
На вкладке Таблица нажмите кнопку Добавить правило и укажите пользователей, группы или Все пользователи и значение поля. Например, чтобы настроить для пользователя доступ ко всем строкам со значением first-company:
Кому разрешён доступ — выберите пользователя.
Значения поля — введите first-company.
Нажмите кнопку Сохранить.
На вкладке JSON задайте конфигурацию RLS в формате JSON. Например, чтобы настроить для пользователя доступ ко всем строкам со значением first-company:
Добавьте в источнике поле с ID пользователей DataLens, по которому будет осуществляться фильтрация. Вы можете добавить это поле в новую таблицу и присоединить ее с помощью оператора JOIN.
Добавьте поле с ID пользователей в датасет:
Если вы добавили поле в существующую таблицу, в датасете перейдите на вкладку Поля и в верхней части экрана нажмите кнопку Обновить поля. Поле с ID пользователей появится в списке.
Если вы добавили поле в новую таблицу, присоедините ее с помощью оператора JOIN. Для этого в датасете перейдите на вкладку Источники и перетащите новую таблицу в рабочую область. Таблица автоматически свяжется с существующей. Если надо, поправьте связь между таблицами и удалите дубликаты полей, получившиеся в результате соединения таблиц.
Настройте права доступа к полю:
В датасете перейдите на вкладку Поля.
Найдите поле с ID пользователей. В правой части строки нажмите значок и выберите Права доступа.
В открывшемся окне задайте права доступа к полю:
В интерфейсе
JSON
В окне настроек RLS на вкладке Таблица нажмите кнопку Добавить правило.
Для параметра Кому разрешён доступ выберите Идентификаторы пользователей.
Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с идентификаторами, указанными в поле.
В окне настроек RLS на вкладке JSON задайте конфигурацию RLS в формате JSON:
Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с идентификаторами, указанными в поле.
Сохраните датасет.
Пример
Построим дашборд по данным продаж в разрезе 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
Каждый пользователь будет видеть данные только того региона, для которого ему настроен доступ.
Чтобы изменить разграничение прав доступа, обновите данные в таблице источника.