Современные информационные системы должны не только хранить большие объёмы данных‚ но и обеспечивать строгое разграничение доступа к ним. В конфигурациях «1С:Предприятие 8» эту задачу решает механизм Row Level Security (RLS)‚ который с недавних пор получил «производительный» режим‚ значительно ускоряющий работу в клиент-серверных и кластерных вариантах. Ниже ― подробный разбор ключевых аспектов.
Что такое RLS и зачем нужен «производительный» режим
RLS — это набор правил‚ фильтрующий записи (строки) таблиц‚ доступные пользователю. До версии БСП 3.0 использовался «классический» режим‚ где ограничения вычислялись на стороне сервера 1С для каждого запроса. В результате при миллионах записей наблюдался рост времени ответа и блокировок.
Производительный режим переносит вычисление ограничений в реляционную СУБД. Ограничение формируется в виде SQL-условия WHERE ...‚ которое прозрачно дописывается к любым SELECT-ам. Это снижает нагрузку на сервер 1С и ускоряет работу в десятки раз.
Как включить производительный RLS
- Откройте административный раздел: Администрирование → Настройка пользователей и прав.
- Установите флаг «Ограничивать доступ на уровне записей».
- В поле «Вариант работы» выберите «Производительный».
- Нажмите «Обновить ограничения» (важно выполнять в период‚ когда нет активных пользователей).
Язык запросов в функции ПриЗаполненииОграниченияДоступа
Для производительного метода обязательно реализовать экспортную функцию ПриЗаполненииОграниченияДоступа в модуле менеджера объекта (документа‚ справочника‚ регистра). Функция возвращает строку-условие SQL или НЕОПРЕДЕЛЕНО‚ если ограничение не требуется.
Синтаксис шаблонов
ДляОбъекта(Поле)— ограничение по конкретному реквизиту.ДляОбъекта— безусловное ограничение на чтение/изменение всего объекта.Если &ОграничениеДоступаНаУровнеЗаписейУниверсально Тогда ... Иначе ИСТИНА КонецЕсли— универсальная ветка‚ работающая в обоих режимах.
Пример реализации
Функция ПриЗаполненииОграниченияДоступа(Право‚ ПараметрыСеанса) Экспорт
Если Право = "Чтение" Тогда
Возврат "Организация IN (SELECT Организация FROM ОбщиеСправочники.ГруппыДоступаПользователей ГДП
WHERE ГДП.Пользователь = " + ПараметрыСеанса.ТекущийПользователь)";
КонецЕсли;
Возврат Неопределено;
КонецФункции
Построение ролей и шаблонов
Чтобы RLS «увидел» новые правила‚ нужно:
- Создать роль чтения и выдать права «Чтение» и «Просмотр».
- В шаблоне роли указать
ДляОбъекта(Организация)и вставить ограничение‚ описанное выше. - Если ограничение должно действовать на прочие поля‚ добавить
ДляОбъектас логикойИСТИНАпо умолчанию.
Группы доступа как гибкий инструмент
Иногда одного профиля недостаточно: у одних сотрудников доступ к «Складу №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‚ не жертвуя скоростью. При правильной реализации экспортной функции и соблюдении ограничений вы получите систему‚ способную масштабироваться до миллионов записей без роста времени отклика.
Начните с простого примера (например‚ фильтра по организациям)‚ протестируйте на тестовой базе‚ затем аккуратно перенесите на продакшн, и ваши пользователи будут благодарны за молниеносные списки документов.