Производительном варианте ограничений прав доступа

Узнай, как производительный вариант ограничений прав доступа ускоряет систему и защищает данные без головной боли!

Бесплатная консультация юриста

+7 (800) 301-07-30

Реклама jurik.ru

Современные информационные системы должны не только хранить большие объёмы данных‚ но и обеспечивать строгое разграничение доступа к ним. В конфигурациях «1С:Предприятие 8» эту задачу решает механизм Row Level Security (RLS)‚ который с недавних пор получил «производительный» режим‚ значительно ускоряющий работу в клиент-серверных и кластерных вариантах. Ниже ― подробный разбор ключевых аспектов.

Что такое RLS и зачем нужен «производительный» режим

RLS — это набор правил‚ фильтрующий записи (строки) таблиц‚ доступные пользователю. До версии БСП 3.0 использовался «классический» режим‚ где ограничения вычислялись на стороне сервера 1С для каждого запроса. В результате при миллионах записей наблюдался рост времени ответа и блокировок.

Производительный режим переносит вычисление ограничений в реляционную СУБД. Ограничение формируется в виде SQL-условия WHERE ...‚ которое прозрачно дописывается к любым SELECT-ам. Это снижает нагрузку на сервер 1С и ускоряет работу в десятки раз.

Как включить производительный RLS

  1. Откройте административный раздел: Администрирование → Настройка пользователей и прав.
  2. Установите флаг «Ограничивать доступ на уровне записей».
  3. В поле «Вариант работы» выберите «Производительный».
  4. Нажмите «Обновить ограничения» (важно выполнять в период‚ когда нет активных пользователей).

Язык запросов в функции ПриЗаполненииОграниченияДоступа

Для производительного метода обязательно реализовать экспортную функцию ПриЗаполненииОграниченияДоступа в модуле менеджера объекта (документа‚ справочника‚ регистра). Функция возвращает строку-условие SQL или НЕОПРЕДЕЛЕНО‚ если ограничение не требуется.

Синтаксис шаблонов

  • ДляОбъекта(Поле) — ограничение по конкретному реквизиту.
  • ДляОбъекта — безусловное ограничение на чтение/изменение всего объекта.
  • Если &ОграничениеДоступаНаУровнеЗаписейУниверсально Тогда ... Иначе ИСТИНА КонецЕсли — универсальная ветка‚ работающая в обоих режимах.

Пример реализации


Функция ПриЗаполненииОграниченияДоступа(Право‚ ПараметрыСеанса) Экспорт
 Если Право = "Чтение" Тогда
 Возврат "Организация IN (SELECT Организация FROM ОбщиеСправочники.ГруппыДоступаПользователей ГДП
 WHERE ГДП.Пользователь = " + ПараметрыСеанса.ТекущийПользователь)";
 КонецЕсли;
 Возврат Неопределено;
КонецФункции
 

Построение ролей и шаблонов

Чтобы RLS «увидел» новые правила‚ нужно:

  1. Создать роль чтения и выдать права «Чтение» и «Просмотр».
  2. В шаблоне роли указать ДляОбъекта(Организация) и вставить ограничение‚ описанное выше.
  3. Если ограничение должно действовать на прочие поля‚ добавить ДляОбъекта с логикой ИСТИНА по умолчанию.

Группы доступа как гибкий инструмент

Иногда одного профиля недостаточно: у одних сотрудников доступ к «Складу №1»‚ у других ― к «Складу №2». Вместо создания множества профилей можно:

  • задать один профиль «Складской доступ»;
  • в группе доступа пользователей указать «Ограничения доступа»‚ где уже прописать конкретные значения складов.

Практический пример: разграничение по организациям

Задача

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

Шаги настройки

  • Включить функциональную опцию «Ограничивать доступ на уровне записей».
  • Создать справочник «Группы доступа по организациям» со структурой: Пользователь → Организация.
  • В обработчике ПриЗаполненииОграниченияДоступа сформировать SQL-условие по выборке из этого справочника.
  • Проверить работу: под администратором создать документы для разных организаций‚ под обычным пользователем убедиться‚ что «чужие» документы не видны.

Ограничения и рекомендации

«Производительный» режим не лишён особенностей:

  • Нельзя использовать пользовательские функции 1С внутри SQL-условия.
  • Изменение состава групп доступа требует повторной перегенерации ограничений (Обновить ограничения).
  • Желательно запускать обновление в нерабочее время‚ чтобы избежать блокировок.

Мониторинг производительности

Для оценки эффекта можно использовать:

  • встроенный ТекущаяУниверсальнаяДатаВМиллисекундах для замера времени выполнения запросов;
  • отчёт по технологическому журналу 1С;
  • динамику SQL-трассировки СУБД (MS SQL Profiler‚ PostgreSQL pg_stat_statements).

В реальной базе 100 000 документов переключение на производительный RLS уменьшило время открытия списка документов пользователем с 6‚2 секунды до 0‚8 секунды при прокрутке 3 537 доступных записей.

Действие Классический RLS Производительный RLS
Место вычисления фильтра Сервер 1С СУБД
Влияние на файловые ИБ Допускается Не рекомендуется
Необходимость функции ПриЗаполненииОграниченияДоступа Не обязательна Обязательна
Автоматически Требуется «Обновить ограничения»

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

Начните с простого примера (например‚ фильтра по организациям)‚ протестируйте на тестовой базе‚ затем аккуратно перенесите на продакшн, и ваши пользователи будут благодарны за молниеносные списки документов.