← Назад ко всем вопросам

Как RLS взаимодействует с временными таблицами и виртуальными таблицами

1️⃣ Как кратко ответить

RLS (Row-Level Security) в 1С не применяется к временным таблицам, так как они создаются и управляются в контексте текущей сессии пользователя. Виртуальные таблицы, являясь частью механизма запросов, могут быть подвержены RLS, если они используют данные из таблиц, к которым применены правила безопасности.

2️⃣ Подробное объяснение темы

RLS (Row-Level Security) — это механизм, который позволяет ограничивать доступ к строкам данных в таблицах на уровне базы данных. В 1С это реализуется через правила безопасности, которые определяют, какие строки данных доступны конкретному пользователю или группе пользователей.

Временные таблицы

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

Пример создания временной таблицы:

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Товары.Номенклатура КАК Номенклатура,
    |   Товары.Количество КАК Количество
    |ПОМЕСТИТЬ ВременнаяТаблица
    |ИЗ
    |   Документ.ЗаказПокупателя.Товары КАК Товары
    |ГДЕ
    |   Товары.Количество > 0";
​
Запрос.Выполнить();
  • Запрос.Текст: Определяет текст запроса, который будет выполнен.
  • ПОМЕСТИТЬ ВременнаяТаблица: Указывает, что результат запроса будет помещен во временную таблицу.
  • Запрос.Выполнить(): Выполняет запрос, создавая временную таблицу в памяти.

Виртуальные таблицы

Виртуальные таблицы в 1С — это специальные таблицы, которые не хранят данные напрямую, а формируют их на основе других данных в реальном времени. Они часто используются для представления агрегированных данных или для упрощения сложных запросов.

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

Пример использования виртуальной таблицы:

Запрос = Новый Запрос;
Запрос.Текст = 
    "ВЫБРАТЬ
    |   Продажи.Номенклатура КАК Номенклатура,
    |   СУММА(Продажи.Количество) КАК ОбщийОбъем
    |ИЗ
    |   РегистрНакопления.Продажи КАК Продажи
    |ГДЕ
    |   Продажи.Период МЕЖДУ &НачалоПериода И &КонецПериода
    |СГРУППИРОВАТЬ ПО
    |   Продажи.Номенклатура";
​
Запрос.УстановитьПараметр("НачалоПериода", НачалоПериода);
Запрос.УстановитьПараметр("КонецПериода", КонецПериода);
Результат = Запрос.Выполнить().Выбрать();
  • РегистрНакопления.Продажи: Используется как источник данных для виртуальной таблицы.
  • СУММА(Продажи.Количество): Агрегатная функция, которая суммирует количество продаж.
  • СГРУППИРОВАТЬ ПО Продажи.Номенклатура: Группирует данные по номенклатуре.

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

Тема: RLS и безопасность
Стадия: Tech

🔒 Подпишись на бусти автора и стань Алигатором, чтобы получить полный доступ к функционалу сайта и отслеживать свой прогресс!

Твои заметки