Перейти к содержимому
Tez Base

RLS в 1С: универсальный против классического - что выбрать и когда менять

· Опубликовано: · Обновлено:

Права и безопасность

Ограничение доступа на уровне записей (RLS) - механизм, который показывает кассиру его магазин и прячет чужой. В типовых конфигурациях на “Библиотеке стандартных подсистем” таких механизмов два, и выбор между ними - это выбор, чем вы готовы платить: местом на диске и дисциплиной обслуживания или процессорным временем на каждом чтении. Ошибка в выборе стоит дорого - мы видели базу, где она стоила 3,85 терабайта.

Как работает классический RLS

Классический механизм - это условие, которое платформа подставляет прямо в текст запроса каждого списка и отчёта. Кассир открывает список чеков - к запросу добавляется ГДЕ Магазин = &МойМагазин (упрощённо; в реальности - шаблоны ограничений в ролях).

Плюсы: ничего не хранится дополнительно; права меняются мгновенно - поменяли роль, и следующее чтение уже с новым условием; поведение прозрачно и предсказуемо.

Минусы: каждое чтение платит за вычисление условия. На простых отборах это копейки. На сложных ограничениях (иерархии подразделений, пересечения групп доступа) условие превращается в развесистое соединение, и списки начинают ощутимо тормозить - особенно там, где чтений много: кассы, рабочие места менеджеров. Это и есть типовая жалоба “RLS тормозит”: механизм работает правильно, а список открывается секундами. Соседняя жалоба - “из-за RLS отчёт пустой” - на ограничение записей обычно вообще не про него: чаще виновато право просмотра на одно поле, и снимается эта версия одним подсчётом строк. Лечится она разбором конкретных планов запросов, а не отключением ограничений, и входит в оптимизацию производительности 1С.

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

Универсальный механизм решает проблему “платим на каждом чтении” кардинально: посчитать всё заранее. Система материализует “ключи доступа” - для каждого пользователя и каждого объекта заранее вычисленный ответ “видит / не видит”. В момент чтения остаётся дёшево соединиться с готовой таблицей ключей.

Плюсы: быстрые чтения даже при очень сложной модели прав; нагрузка смещается из горячего пути (открытие списка) в фоновую (пересчёт ключей).

Минусы: это гигантский материализованный кэш со всеми его обязанностями:

  • Кэш надо хранить. Таблицы ключей доступа при большом числе пользователей и объектов занимают десятки и сотни гигабайт.
  • Кэш надо инвалидировать. Каждое изменение ролей, профилей, состава пользователей ставит в очередь задания пересчёта. Эти очереди перемалывают регламентные задания.
  • Кэш живёт своей жизнью. Изменения шаблонов ограничений версионируются - и история версий тоже растёт.

Что происходит, когда обслуживание выключают

Самая опасная особенность универсального механизма: если выключить регламентные задания пересчёта, он не останавливается. Он продолжает прилежно ставить задания в очередь, которые никто не забирает, и копить версии шаблонов, которые никто не читает. Без ошибок и предупреждений.

Реальный случай из нашего проекта обрезки базы 4,2 ТБ: задания пересчёта выключили в 2020 году, потому что они грузили сервер. Шесть лет спустя картина выглядела так:

ЧтоОбъём
История версий шаблонов ограничения доступа3,34 ТБ
Очереди “пересчитать ключи доступа” (2,37 млрд строк)~0,5 ТБ
Итого мёртвого кэша3,85 ТБ из 4,2 ТБ базы

Больше 90 % базы - не данные бизнеса, а ТОДО-лист механизма, который никто не собирался выполнять. При этом сам RLS был жив: 208 ролей ежедневно пользовались ограничениями. Мёртвой была только кэширующая часть.

Критерии выбора: когда какой

Классический RLS подходит, если:

  • модель прав простая: отбор по магазину/подразделению/организации без глубоких пересечений;
  • пользователей и объектов много, а дисциплины обслуживания мало - классика не требует ухода;
  • изменения прав должны применяться мгновенно.

Универсальный RLS оправдан, если:

  • модель прав действительно сложная и на классике списки уже тормозят;
  • есть кому следить за регламентными заданиями пересчёта - постоянно, а не “настроили и забыли”;
  • размер таблиц ключей мониторится так же, как размер базы.

Главное правило: универсальный механизм - это не “поставил и забыл”, это подписка на обслуживание кэша. Не готовы платить подписку - берите классику.

Как переехать с универсального на классический

Переход - прикладная задача, но с одной зоной смертельного риска: правами. “Почти как раньше” в правах равно “авария”: кассир, увидевший чужой магазин, - инцидент безопасности; менеджер, потерявший свой, - остановка работы.

Наш процесс на живом проекте (~200 касс, отбор внедрён в 23 документах):

  1. Инвентаризация: какие роли реально используют ограничения (у нас - 208), какие списки ходят через универсальный механизм.
  2. Внедрение классических отборов в динамические списки - средствами конфигурации.
  3. Матрица эквивалентности прав: таблица “роль × сценарий × видимость” до и после - у нас 329 проверок, расхождений 0. Это скучно и обязательно: скучная таблица сильно приятнее интересного инцидента. Как её собрать и снимать срезы автоматически - в отдельной статье: матрица эквивалентности прав.
  4. Переключение и наблюдение. Только после недель наблюдения кэш универсального механизма можно считать по-настоящему мёртвым.

Эффект на нашем проекте: чтения по списку чеков с учётом RLS - 162 млн → 94. Не в процентах - в 1,7 миллиона раз.

Итог

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

Если подозреваете, что ваш RLS-кэш разросся - проверить это можно за час: постройте карту объёмов базы (метод ПолучитьСтруктуруХраненияБазыДанных() + размеры таблиц) и посмотрите, что в топе. Подробная методика - в расследовании “Мы удалили 97,5 % боевой базы”.

Могу починить это за вас

Находим настоящую причину, почему 1С тормозит и как ускорить её работу - по технологическому журналу и планам запросов, а не наугад. Ускоряем проведение документов, отчёты и обмены в разы. Удалённо по всему Казахстану и СНГ.

Стоимость
150 000 - 450 000 ₸ТЗ и оптимизация под ключ, без налогов; доработки сверх плана - единым счётом по факту диагностики
типичный результат по "тяжёлым" операциям
часы → минуты

Рано писать? Измерьте сами

Чек-ап СУБД под 1С: 40+ проверок с вердиктом по каждой

Открыть обработку

INFOSTART TECH EVENT 2026: конференция для 1с-специалистов. если собираетесь, регистрируйтесь по нашей ссылке. Регистрация →

Читайте также

Ускорит ли внешняя компонента на C++ ваш код 1С: как посчитать до того, как писать

Медленное место в 1С хочется вынести в компоненту на C++, но выигрыш бывает и в тысячу раз, и отрицательный. Разбираем, из чего складывается время компоненты, сколько стоит граница в изолированном режиме и в процессе 1С, с какого объёма компонента окупается и в каких задачах её лучше не писать. Все числа из замера 31 задачи на платформе 8.3.27 с проверкой одинаковости результата.

Почему нейросеть повторяет одно и то же: карта внимания модели, снятая на встроенном языке 1С

Модель смотрит в вопрос, пока пишет первые три символа ответа, а дальше почти только на себя. Если выключить у неё одну голову внимания из четырёх, верных ответов не остаётся, а больше трети ответов уходят в повтор вроде "стстстст". Разбираем, как снять карту внимания функцией на сорок строк, что она показала на сорока вопросах и что из этого следует для тех, кто работает с большими моделями.

Нейросеть для проверки кода 1С: как проверить её на своём коде до внедрения

Прежде чем отдавать нейросети ревью кода 1С, её стоит принять на своём коде: у нас одна и та же локальная модель нашла 11 дефектов из 13 на учебных процедурах и 0 из 5 на рабочих. Разбираем порядок приёмки: какие два числа считать, из чего собрать проверочный набор, как поднять стенд без интернета и по каким признакам видно, что замер врёт.