Настройка прав доступа на уровне записей (RLS)

 

Разграничение прав доступа на уровне записей (Record Level Security, RLS) — это механизм, который позволяет ограничивать доступ пользователей к данным в зависимости от их прав. Пользователи видят только те данные, которые им разрешено просматривать, и даже не подозревают о существовании недоступной информации.

RLS чаще всего используется для ограничения доступа к данным в разрезе организаций, клиентов, территорий или категорий. Например, пользователь будет видеть только «свои» данные, связанные с его организацией или регионом.

RLS работает за счет автоматического добавления специального фильтра к запросу к данным. Этот фильтр ограничивает видимость данных для конкретного пользователя, скрывая часть информации или весь набор, если у пользователя нет прав на его просмотр. Таким образом, пользователь не увидит в отчете данные, на которые ему не был предоставлен доступ.

Для возможности использования одних и тех же настроек RLS для разных наборов данных реализована следующая архитектура:

  • RLS — это надстройка над основным набором данных.
  • Правила доступа настраиваются через профили и объекты RLS.
  • Пользователи могут быть связаны с объектами RLS напрямую или через роли.
  • Один профиль и его объекты могут применяться к разным целевым наборам.

Для настройки нужно выполнить следующие шаги:

  1. Сформулируйте принципы разграничения доступа:
    Определите, по каким критериям будет ограничиваться доступ к данным (например, по организациям, регионам или категориям).
  2. Подготовьте справочные данные:
    Убедитесь, что у вас есть все необходимые данные для настройки фильтров (например, список организаций, регионов или пользователей).
  3. Включите механизм RLS:
    Активируйте функцию RLS в настройках источника данных.
  4. Настройте роли RLS
    Создайте роли, которые будут определять, какие данные доступны пользователям (например, «Менеджер по регионам», «Администратор»).
  5. Настройте профили RLS:
    Создайте профили, которые будут содержать правила фильтрации данных для каждой роли.
  6. Объедините профили и роли в объекты RLS:
    Свяжите профили с ролями, чтобы определить, какие правила применяются к каким пользователям.
  7. Установите ограничения в целевом наборе данных:
    Примените настроенные объекты RLS к конкретным наборам данных, чтобы ограничить доступ пользователей.
  8. Присвойте пользователям соответствующие роли RLS:
    Назначьте роли пользователям, чтобы они могли видеть только те данные, которые им разрешено просматривать.
  9. Включите использование RLS:
    Активируйте RLS в настройках источника данных, чтобы ограничения вступили в силу.

Подробные инструкции описаны ниже.

Принципы разграничения прав и подготовка справочных наборов данных

Для использования RLS необходимо подготовить справочники значений (наборы данных для профиля RLS), содержащие записи, по которым будет осуществляться предоставление или ограничение доступа к данным основного набора.

Набор данных для профиля RLS может включать следующие элементы:

  • Поле RLS — идентификатор;
  • Представление поля RLS — значение;
  • Поле родителя RLS — идентификатор атрибута;
  • Представление поля родителя RLS — значение атрибута.

Предоставление или ограничение доступа может осуществляться как по «Полю RLS», так и по «Родителю поля RLS» (группе полей с одинаковым атрибутом). Значения в полях представления служат для удобства восприятия информации и будут отображаться в настройках вместо значений идентификаторов.

Примеры использования RLS и соответствие данных справочного набора:

Тип поля RLS по менеджерам/ отделам RLS по контрагентам/ регионам RLS по организациям/ ОИВам (Органам исполнительной власти)
Настройка
«Поле RLS» (идентификатор) Код менеджера Код контрагента Код организации
«Представление поля RLS» (значение) ФИО менеджера Наименование контрагента Наименование организации
«Поле родителя RLS» (идентификатор атрибута) Код отдела Код региона Код ОИВ
«Представление поля родителя RLS» (значение атрибута) Наименование отдела Наименование региона Наименование ОИВа
Результат
Настройка RLS по объектам Каждому менеджеру доступны только свои результаты Каждому сотруднику компании-контрагента доступны только результаты своей компании Каждому сотруднику доступны только результаты по своей организации
Настройка RLS по группам объектов Руководителю отдела доступны результаты по менеджерам своего отдела Территориальному менеджеру доступны результаты по всем компаниям-контрагентам своего региона Каждому сотруднику ОИВа доступны результаты по организациям, подчиняющимся этому ОИВу

Установка механизма RLS для источника

Поскольку механизм RLS является надстройкой над основным функционалом, возможность его использования необходимо установить в нужном источнике данных. Установка механизма RLS производится под ролью «Администратор». Дальнейшая настройка и управление возможны под ролью «Аналитик».

Для включения RLS перейдите в раздел «Администрирование/ Источники» и выберите источник данных, для которого необходимо включить RLS, и в разделе «Дополнительные опции/ Поддержка RLS» нажмите на кнопку «Установить».

При успешной установке появится информационное сообщение «Модуль RLS успешно подключен».

После установки RLS для выбранного источника, в режиме «Администрирование» в меню станут доступны следующие разделы: «Настройки RLS», «Роли RLS» (1). В параметрах наборов данных раздела «Наборы данных» появится пункт «Настройки RLS» (2):

Важно! При нажатии на кнопку «Отменить установку» все настройки RLS («Роли», «Профили», «Объекты») удаляются.
Для восстановления настроек придется проделать всю работу заново. Если необходимо сохранить настройки, но не использовать RLS в работе, используйте возможность включения/выключения RLS в поле «Активность RLS».

Настройка Ролей RLS

Роли RLS — один из типов ролей, используемых на портале. Этот тип ролей нужен для привязки пользователей к объектам RLS. Если пользователю присвоили роль, то он имеет права, указанные в объекте RLS, привязанного к этой роли. При включенном RLS для набора данных, пользователь, у которого нет соответствующей роли RLS, не увидит данные из набора.

В разделе «Роли RLS» вы можете создать и отредактировать роли RLS. Для этого выберите источник данных и нажмите на кнопку «Добавить роль».

В открывшемся окне укажите наименование роли и пользователей, которым присваивается эта роль RLS, и нажмите на кнопку «Создать».

Добавленные роли RLS можно изменять и удалять с помощью кнопок «Редактировать» и «Удалить». В этом же интерфейсе можно присваивать роль новым пользователям или убрать ее использование у пользователя.

Настройка Профилей RLS

Профиль RLS — это надстройка над справочным набором данных, здесь устанавливается какие поля справочного набора будут являться фильтрами по значениям и группам значений.

Для создания профиля перейдите в раздел «Администрирование/ Настройки RLS», выберите источник данных и нажмите на кнопку «Новый профиль».

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

  • поле RLS (идентификатор);
  • поле представления (значение);
  • при необходимости — поле родителя RLS (идентификатор атрибута) и поле представления родителя (значение атрибута).

После заполнения нажмите на кнопку «Создать».

Добавленные Профили RLS можно изменять и удалять с помощью кнопок «Редактировать» и «Удалить».

Настройка Объектов RLS

Объект RLS — это описание варианта ограничения для выбранного профиля и привязка к этому ограничению ролей RLS и/или пользователей. Для каждого профиля может быть создано неограниченное количество объектов (вариантов ограничений). Рекомендуется создать один из вариантов, разрешающих доступ ко всем объектам профиля.

Настройка объекта RLS выполняется в том же интерфейсе, где настраиваются профили.

Для этого:

  1. Перейдите в раздел «Настройки RLS».
  2. Выберите источник данных.
  3. Выберите профиль RLS (кликните на него мышью).
  4. Нажмите на кнопку «Новый объект».

В открывшемся окне поле Профиль RLS заполнится автоматически.

  1. Укажите название объекта.
  2. Выберите Роль RLS, нажав кнопку «Роли RLS Выбрать» и/или Пользователей, нажав на кнопку «Пользователи Выбрать».
  3. Выберите Тип условия.

Возможны следующие типы условий:

  • «Включение» — требует указания значений, которые будут доступны;
  • «Включение всех» — не требует указания значений, все значения будут доступны;
  • «Исключение» — требует указания значений, которые будут недоступны;
  • «Исключение всех» — не требует указания значений, все значения будут недоступны.

Если выбран тип условия «Включение» или «Исключение», дополнительно потребуется:

  • Выбрать Тип поиска («по элементу» или «по родителю»).
  • Указать значения, нажав на кнопку «Значения Выбрать». Откроется список элементов или родителей в зависимости от выбранного типа поиска.

После заполнения всех полей нажмите на кнопку «Создать».

Добавленные Объекты RLS можно изменять и удалять с помощью кнопок «Редактировать» и «Удалить».

Включение и настройка RLS для нужного набора данных

После настройки всех правил RLS (профилей, ролей и объектов) необходимо привязать их к целевым наборам данных. Эта привязка выполняется вручную, чтобы обеспечить гибкость и не ограничиваться определенными названиями полей. Аналитик должен указать, какое поле из целевого набора данных соответствует полю из справочного набора, чтобы ограничить видимость данных для пользователя.

Для включения использования RLS на определенном наборе данных перейдите в раздел «Наборы данных», выберите нужный набор и откройте «Настройки RLS».

Выберите профиль и поле, по которым нужно связать набор данных и нажмите на кнопку «Применить RLS» — в результате сформируется SQL-запрос RLS.

Далее, необходимо включить RLS с помощью переключателя и нажать «Сохранить», чтобы изменения вступили в силу.

Важно! Пока использование RLS для источника не включено, ограничения в наборе данных не действуют, и все пользователи с доступом к отчету видят все данные. Если данные конфиденциальные, ограничьте доступ к отчетам до активации RLS.

Включение RLS для источника

Настройка RLS — это многоэтапный процесс, поэтому его активация выполняется отдельной настройкой. Это позволяет проводить настройку поэтапно, при необходимости останавливать и возобновлять ее. Незавершенная настройка RLS не влияет на работу системы.

Когда все настройки для работы RLS завершены, можно активировать механизм. Для этого необходимо включить RLS для источника. Эта операция доступна только администратору системы.

Включить или отключить RLS (без потери выполненных настроек) можно в разделе «Администрирование» → «Источники» или «Настройки RLS».

После активации RLS настроенные правила из Объектов RLS начнут применяться ко всем пользователям, которым назначены соответствующие роли или которые указаны в настройках напрямую. Для остальных пользователей доступ к данным будет заблокирован.

Особенности применения ограничений:

  1. Созданные настройки RLS суммируются.

    • Если создано 2 RLS-объекта с включением и исключением одного и того же элемента, то в итоге будет применено исключение.
    • Если пользователю предоставлены права «Включение всех» элементов и дополнительно «Включение» конкретного элемента, то права «Включение всех» будут перекрыты логикой «Включение».
  2. Настройки RLS применяются только после сохранения. Это может привести к ситуации, когда для пользователя (или группы пользователей) необходимо ограничить доступ, например, ко всем организациям «Восточного округа», кроме «Управы района Богородское города Москвы» и «Управы района Вешняки города Москвы». В этом случае может возникнуть временная проблема: одно исключение уже применяется, а другое ещё не вступило в силу, и пользователь получит доступ к данным, которые должны быть скрыты.

Как правильно настроить такие ограничения:

  • Создать один объект RLS с исключением целевых элементов:

Настройте исключения для обеих управ в одном объекте RLS.

  • Использовать несколько простых объектов RLS:
    • Сначала добавьте пользователя в роль «Исключение всех». С этого момента ему будут недоступны все организации.
    • Затем настройте конкретные исключения (например, доступ к определённым управам).
    • После настройки исключений удалите пользователя из роли «Исключение всех».

Этот подход обеспечивает корректное применение ограничений и предотвращает временный доступ к данным, которые должны быть скрыты.

Важно! Ограничения RLS действуют также и на пользователей с правами администратора. Если у администратора нет прав на просмотр данных, он их не увидит.