При работе с крупными информационными базами на платформе 1С:Предприятие 8.3 администраторы и разработчики часто сталкиваются с существенным замедлением работы системы при включении ограничений доступа на уровне записей (RLS). Для решения этой проблемы в Библиотеке стандартных подсистем (БСП), начиная с версии 3.0, был внедрен механизм так называемого «универсального» или «производительного» режима RLS. Ключевым элементом этого механизма является регистр сведений КлючиДоступаКОбъектам. Разберем подробно, для чего он предназначен, как он функционирует и как его правильно обслуживать.
Давайте проанализируем ситуацию: в классическом (старом) режиме RLS система была вынуждена при каждом запросе пользователя «на лету» дописывать к основному SQL-запросу сложные условия с многочисленными соединениями. Например, если у пользователя есть доступ только к документам по определенным организациям или подразделениям, СУБД должна была проверять эти поля в каждом документе выборки. Это создавало огромную нагрузку, особенно в динамических списках и отчетах.
Рассмотрим, как эту проблему решает регистр КлючиДоступаКОбъектам. Основная идея заключается в предварительном расчете прав. Вместо того чтобы вычислять доступ в момент запроса, система делает это заранее — в момент записи объекта или по регламентному заданию. В регистре хранится жесткая связка: Конкретный Объект (ссылка на справочник или документ) — Ключ доступа (уникальный идентификатор набора условий доступа).
Таким образом, когда пользователь открывает список, 1С больше не анализирует поля «Организация» или «Склад» внутри документов. Она просто соединяет таблицу документов с регистром КлючиДоступаКОбъектам, фильтруя данные по уже готовым ключам, которые разрешены данному пользователю.
Разберем по шагам, как происходит взаимодействие различных объектов системы в производительном режиме RLS:
КлючДоступа. Это справочник, который хранит комбинацию этих условий.КлючиДоступаПользователей. В нем хранится информация о том, какие именно ключи (группы условий) доступны конкретному пользователю в данный момент.ГДЕ КлючДоступа ИЗ (Список разрешенных ключей текущего пользователя). На уровне SQL это превращается в максимально эффективное соединение (JOIN) по индексированным полям.Выясним причину, по которой этот регистр может быть пустым или содержать неактуальные данные. Существует несколько сценариев:
КлючиДоступаКОбъектам сами не очищаются. Они могут остаться там в виде «мусора», но программные механизмы БСП перестанут к ним обращаться.Проанализируем процесс актуализации данных. Поскольку предварительный расчет требует времени, 1С не всегда обновляет ключи мгновенно. Это особенно заметно при массовой загрузке данных или групповом изменении реквизитов.
В системе работает регламентное задание Обновление доступа на уровне записей. Оно выполняет следующие функции:
Обратите внимание: если это регламентное задание по какой-то причине зависнет или будет отключено, пользователи могут столкнуться с ситуацией, когда они не видят новые документы, даже если у них есть на это права. Это происходит потому, что в регистре КлючиДоступаКОбъектам еще не появилась запись для нового объекта. Для точечного решения подобных сбоев подойдёт обработка для пересчета прав доступа конкретных пользователей и групп.
Рассмотрим типичные сложности, возникающие при эксплуатации этого механизма в крупных информационных системах:
КлючиДоступаКОбъектам — один из самых быстрорастущих. В нем создается минимум одна запись на каждый значимый объект системы. В базах с миллионами документов этот регистр может занимать гигабайты дискового пространства.Для решения подобных проблем в составе БСП предусмотрена специальная обработка «Обновление доступа на уровне записей». С её помощью можно:
Для понимания полной картины работы RLS, посмотрим на родственные объекты:
Справочник.КлючиДоступа: Хранит сами уникальные наборы условий.РегистрСведений.КлючиДоступаПользователей: Связывает ключи с конкретными сотрудниками.РегистрСведений.КлючиДоступаКРегистрам: Выполняет ту же роль, что и обсуждаемый регистр, но для записей регистров накопления, бухгалтерии или сведений (поскольку у них нет ссылки, привязка идет по наборам полей).Подводя итог, можно сказать, что КлючиДоступаКОбъектам — это «фундамент» быстродействия современных систем на базе 1С. Понимание принципов его работы критически важно для любого разработчика или администратора, занимающегося оптимизацией производительности и настройкой сложных прав доступа.