Управление доступом на уровне строк данных (RLS)

RLS (Row-level security — безопасность на уровне строк) позволяет ограничить доступ к данным для пользователей или группы пользователей в рамках одного датасета. Например, вы можете разграничить доступ разным клиентам.

Важно

  • При использовании RLS ограничьте доступ к подключению с помощью права доступа Исполнение. Это исключит возможность изменить права доступа к строкам, а также открыть окно предпросмотра данных или создать новый датасет на основе подключения.

  • В RLS поддерживается разграничение доступа только для строковых значений.

  • Ограничения RLS действуют на строки целиком, а не только на поля, по которым задается разграничение доступа.

Разграничить доступ к данным на уровне строк можно как в датасете, так и в источнике данных.

Настройка RLS на уровне датасета

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

При использовании RLS запросы к датасету проходят через следующий фильтр:

where измерение in (значение_1, значение_2 ... значение_N)

Вы можете настроить доступ к строкам с помощью интерфейса или задать конфигурацию в формате JSON:

  1. Откройте датасет и перейдите на вкладку Поля.

  2. Для поля, которому требуется настроить доступ, нажмите значок или Права доступа.

  3. В открывшемся окне на вкладке Таблица нажмите кнопку Добавить правило и укажите:

    • Кому разрешен доступ:

      • Пользователи и группы — доступ будет предоставлен указанным пользователям и группам. Можно воспользоваться поиском по имени, логину или почте пользователя.
      • Все пользователи — доступ будет предоставлен всем пользователям.
      • Идентификаторы пользователей — доступ будет разграничен на уровне источника данных.
    • Значение поля. Доступ будет предоставлен ко всем строкам с указанным значением в поле.

    Настройка RLS

    screenshot

  4. Чтобы добавить еще одно правило, повторите предыдущий шаг.

  5. Нажмите кнопку Сохранить.

  6. Сохраните датасет.

  1. Откройте датасет и перейдите на вкладку Поля.

  2. Для поля, которому требуется настроить доступ, нажмите значок или Права доступа.

  3. В открывшемся окне на вкладке JSON задайте конфигурацию RLS в формате JSON:

    [
      {
        "allowed_value": "sp-21",
        "pattern_type": "value",
        "subject": {
          "subject_id": "ssxiy********",
          "subject_name": "user:ssxiy********",
          "subject_type": "user"
        }
      }
    ]
    

    Где:

    • allowed_value — доступ будет предоставлен ко всем строкам с указанным значением в поле. Значение указывается, только если для pattern_type указано значение value, иначе — null;

    • pattern_type — как будет предоставлен доступ:

      • value — для определенного значения поля, указанного в поле allowed_value;
      • all — для любых значений поля. В этом случае значение allowed_value должно быть равно null;
      • userid — доступ будет разграничен на уровне источника данных;
    • subject — описание субъекта доступа:

      • 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 указывается *;
        • userid — доступ будет разграничен на уровне источника данных.

    Вы можете задать несколько правил, описав каждое в объекте с указанными полями.

  4. Нажмите кнопку Сохранить.

  5. Сохраните датасет.

Настройка RLS на уровне источника данных

Настройка RLS на уровне датасета предполагает его редактирование при каждом изменении настроек RLS.

Чтобы избежать этого, можно перенести логику разграничения прав доступа на уровне строк на сторону источника данных:

  1. В исходные данные добавьте новое поле для хранения ID пользователя DataLens. По этому полю будет происходить фильтрация всех запросов в источник.

    Свой ID можно посмотреть в параметрах своей учетной записи. Если вам нужен ID другого пользователя, попросите его посмотреть свою учетную запись и передать ID вам.

  2. Для каждой строки исходных данных укажите ID пользователя DataLens, которому должна быть доступна данная строка. Если к одной строке должен быть доступ у нескольких пользователей, то логику разграничения можно вынести в отдельную таблицу и объединить ее с основной таблицей на уровне датасета.

  3. В датасете настройте доступ к полю с ID пользователей:

    1. В окне настроек RLS на вкладке Таблица нажмите кнопку Добавить правило.

    2. Для параметра Кому разрешён доступ выберите Идентификаторы пользователей.

      Настройка RLS по идентификатору пользователя

      screenshot

    3. Нажмите кнопку Сохранить.

    1. В окне настроек RLS на вкладке JSON задайте конфигурацию RLS в формате JSON:

      [
        {
          "allowed_value": null,
          "pattern_type": "userid",
          "subject": {
            "subject_id": "",
            "subject_name": "userid",
            "subject_type": "userid"
          },
        }
      ]
      
    2. Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с указанными в поле идентификаторами.

  4. Сохраните датасет.

Примечание

Перенос логики RLS на сторону источника возможен для источников, в которых доступно изменение структуры данных.

Как изменить права доступа к строке в датасете

Чтобы настроить права доступа к строкам данных:

  1. Откройте датасет.

  2. Перейдите на вкладку Поля.

  3. В правой части строки нажмите значок и выберите Права доступа.

  4. В открывшемся окне задайте права доступа к полю:

    1. На вкладке Таблица нажмите кнопку Добавить правило и укажите пользователей, группы или Все пользователи и значение поля. Например, чтобы настроить для пользователя доступ ко всем строкам со значением first-company:

      • Кому разрешён доступ — выберите пользователя.
      • Значения поля — введите first-company.
    2. Нажмите кнопку Сохранить.

    1. На вкладке JSON задайте конфигурацию RLS в формате JSON. Например, чтобы настроить для пользователя доступ ко всем строкам со значением first-company:

      [
        {
          "allowed_value": "first-company",
          "pattern_type": "value",
          "subject": {
            "subject_id": "ssxiy********",
            "subject_name": "user:ssxiy********",
            "subject_type": "user"
          }
        }
      ]
      
    2. Нажмите кнопку Сохранить.

  5. Сохраните датасет.

  1. Добавьте в источнике поле с ID пользователей DataLens, по которому будет осуществляться фильтрация. Вы можете добавить это поле в новую таблицу и присоединить ее с помощью оператора JOIN.

  2. Добавьте поле с ID пользователей в датасет:

    • Если вы добавили поле в существующую таблицу, в датасете перейдите на вкладку Поля и в верхней части экрана нажмите кнопку Обновить поля. Поле с ID пользователей появится в списке.
    • Если вы добавили поле в новую таблицу, присоедините ее с помощью оператора JOIN. Для этого в датасете перейдите на вкладку Источники и перетащите новую таблицу в рабочую область. Таблица автоматически свяжется с существующей. Если надо, поправьте связь между таблицами и удалите дубликаты полей, получившиеся в результате соединения таблиц.
  3. Настройте права доступа к полю:

    1. В датасете перейдите на вкладку Поля.

    2. Найдите поле с ID пользователей. В правой части строки нажмите значок и выберите Права доступа.

    3. В открывшемся окне задайте права доступа к полю:

      1. В окне настроек RLS на вкладке Таблица нажмите кнопку Добавить правило.
      2. Для параметра Кому разрешён доступ выберите Идентификаторы пользователей.
      3. Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с идентификаторами, указанными в поле.
      1. В окне настроек RLS на вкладке JSON задайте конфигурацию RLS в формате JSON:

        [
           {
              "allowed_value": null,
              "pattern_type": "userid",
              "subject": {
              "subject_id": "",
              "subject_name": "userid",
              "subject_type": "userid"
              },
           }
        ]
        
      2. Нажмите кнопку Сохранить. Доступ будет предоставлен пользователям с идентификаторами, указанными в поле.

  4. Сохраните датасет.

Пример

Построим дашборд по данным продаж в разрезе 4 регионов (Запад, Восток, Север, Юг). Каждый региональный менеджер должен иметь доступ только к своим данным, руководитель компании — ко всем.

  1. Определим ID для пользователей DataLens.

  2. Создадим в источнике дополнительную таблицу MANAGER_ID, в которой регион соотносится с ID пользователя. Если для одного ID доступны несколько регионов, то перечислим все уникальные пары:

    REGION MANAGER_NAME MANAGER_ID
    Запад Аркадий 19287318273912873
    Восток Василий 92877912837318927
    Север Ольга 02993284928374346
    Юг Дмитрий 10836293849237642
    Запад Максим 71726123712891283
    Восток Максим 71726123712891283
    Север Максим 71726123712891283
    Юг Максим 71726123712891283
  3. Откроем датасет и добавим новую таблицу: на вкладке Источники перетащим таблицу в рабочую область.

  4. Убедимся, что связь JOIN установлена по полю REGION.

    image

  5. По полю MANAGER_ID настраиваем RLS.

    image

    image

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

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