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

Разграничение прав доступа на уровне записей (Record Level Security — сокр. 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 по группам объектов Руководителю отдела доступны результаты по менеджерам своего отдела Территориальному менеджеру доступны результаты по всем компаниям-контрагентам своего региона Каждому сотруднику ОИВа доступны результаты по организациям, подчиняющимся этому ОИВу

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

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

Для этого надо перейти в раздел «Настройки RLS», выбирать источник данных, выбирать профиль RLS (нажать на него мышью) и нажать кнопку «Новый объект»:

В открывшемся окне Профиль RLS заполнится автоматически, указать наименование объекта, выбрать Роль RLS (по кнопке «Роли RLS Выбрать») и/или Пользователей (по кнопке «Пользователи Выбрать»), выбирать Тип условия. При выборе Типа условия «включение»/«исключение» необходимо будет выбрать Тип поиска («по элементу» / «по родителю») и указать значения (по кнопке «Значения Выбрать», откроется список элементов или список родителей в зависимости от выбранного типа поиска). После заполнения нажать «Создать»:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  1. Cозданные настройки RLS суммируются.
  • Если создано 2 RLS-объекта с включением и исключением одного и того же элемента, то в итоге будет применено исключение;

  • Если пользователю предоставлены права «включение всех» элементов и дополнительно «включение» конкретного элемента, то права «включение всех» будут перекрыты логикой «включение».

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

Варианты корректной настройки такого рода ограничений:

  • создать объект RLS с исключением целевых элементов (т.е. исключения двух управ настроены в одном объекте);
  • если же ограничение необходимо применить несколькими простыми объектами, то сначала необходимо добавить пользователя в роль «исключение всех», с этого момента ему не будут доступны все организации, настроить конкретные исключения, а после удалить пользователя из роли «исключение всех».

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