Управление доступом на уровне строк данных (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 пользователя. По этому полю будет происходить фильтрация всех запросов в источник.

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

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

  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 на сторону источника возможен для источников, в которых доступно изменение структуры данных.

Предыдущая
Следующая