При расследовании инцидентов с нехваткой прав доступа у конкретного пользователя часто возникает необходимость выполнить проблемный запрос непосредственно в его сеансе. Однако при попытке открыть внешнюю обработку (в частности, расширенную «Консоль запросов ИТС 2021») система блокирует запуск с критической ошибкой:
Ошибка при вызове конструктора (Файл): Установлен безопасный режим. Выполнение операции запрещено
Разберем причины возникновения этой ситуации, рассмотрим способы успешного запуска консоли запросов под ограниченными правами, а также альтернативные инструменты для точного определения таблиц метаданных, к которым пользователю закрыт доступ.
Проанализируем механизм защиты платформы 1С:Предприятие. Даже если администратор предоставил пользователю роль с правом интерактивного открытия внешних отчетов и обработок, механизмы платформы и Библиотеки стандартных подсистем (БСП) принудительно открывают сторонние файлы в безопасном режиме.
В безопасном режиме действуют жесткие ограничения:
Файл.Версия «Консоль запросов ИТС 2021» содержит дополнительный функционал автоматического управления технологическим журналом текущего сеанса. При инициализации формы модуль обработки обращается к серверному конфигурационному файлу conf.cfg с помощью инструкции Новый Файл(...). Поскольку для сеанса пользователя действует безопасный режим, платформа мгновенно прерывает выполнение аварийным исключением.
Самое быстрое и действенное решение — отказаться от расширенной редакции консоли 2021 года в пользу классической версии консоли запросов с сайта ИТС. В базовой консоли отсутствует модуль интеграции с технологическим журналом, а также отсутствуют серверные вызовы конструктора Файл при открытии формы.
При открытии стандартной консоли безопасный режим не будет конфликтовать с модулем объекта, и обработка откроется штатно, предоставив возможность выполнить запрос от имени текущего пользователя.
Если необходимо использовать именно версию 2021 года (например, из-за удобного интерфейса или истории запросов), устраним конфликтный вызов в коде самой обработки. Для этого откроем обработку в конфигураторе и выполним следующие шаги:
ПолучитьПризнакВключенияЖурналаДляТекущегоСеанса.
Попытка
КаталогКонфигурацииПриложения = ПутьККонфигурационномуФайлу();
// Чтение conf.cfg
Исключение
// В безопасном режиме сбор ТЖ для сеанса отключается без падения обработки
РезультатВключения = Ложь;
КонецПопытки;
После сохранения изменений обработка сможет запускаться в любом сеансе с безопасным режимом, пропуская недоступные сервисные функции.
Платформа 1С:Предприятие не накладывает ограничения безопасного режима внешних файлов на объекты, входящие в состав конфигурации или расширений. Рассмотрим, как это применить:
Теперь обработка доступна пользователю через меню «Функции для технического специалиста» (или общее командное интерфейсное меню) как полноценный встроенный объект метаданных.
Если конфигурация построена на базе БСП, подключим консоль централизованно под учетной записью администратора:
Если цель заключается исключительно в поиске объекта, на который пользователю не хватает прав, рассмотрим альтернативные методы диагностики, не требующие открытия интерактивных консолей.
Это самый точный способ выявления нехватки прав. Когда система выдает общее сообщение «у пользователя недостаточно прав на исполнение операции над базой данных», в технологический журнал записывается точное системное событие.
Создадим или дополним файл logcfg.xml на сервере 1С следующим фильтром:
<config xmlns="http://v8.1c.ru/v8/tech-log">
<log location="C:\Logs\RightsError" history="2">
<event>
<eq property="name" value="EXCP"/>
<like property="Descr" value="*недостаточно прав*"/>
</event>
<property name="all"/>
</log>
</config>
В момент формирования отчета пользователем платформа зафиксирует событие с полным контекстом (свойство Context) и физическим именем таблицы СУБД (например, _InfoRg... или _Document...), к которой был заблокирован доступ.
Выясним проблемные объекты с помощью короткого исполняемого скрипта под администратором. Если известен список таблиц, используемых в отчете, проверим права целевого пользователя методом ПравоДоступа():
ПользовательПроверки = ПользователиИнформационнойБазы.НайтиПоИмени("ИмяПроблемногоПользователя");
Для Каждого Документ Из Метаданные.Документы Цикл
Если Не ПравоДоступа("Чтение", Документ, ПользовательПроверки) Тогда
Сообщить("Нет прав на чтение: " + Документ.ПолноеИмя());
КонецЕсли;
КонецЦикла;
Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл
Если Не ПравоДоступа("Чтение", Регистр, ПользовательПроверки) Тогда
Сообщить("Нет прав на чтение: " + Регистр.ПолноеИмя());
КонецЕсли;
КонецЦикла;
Если отчет разработан на основе схемы компоновки данных (СКД) или использует прямой запрос, проанализируем текст на наличие ключевого слова РАЗРЕШЕННЫЕ:
ВЫБРАТЬ РАЗРЕШЕННЫЕ
ЗаказКлиента.Ссылка КАК Ссылка,
ЗаказКлиента.СуммаДокумента КАК СуммаДокумента
ИЗ
Документ.ЗаказКлиента КАК ЗаказКлиента
Если в запросе используется конструкция ВЫБРАТЬ без модификатора РАЗРЕШЕННЫЕ, а в системе настроены ограничения на уровне записей (RLS), попытка прочитать хотя бы одну недоступную строку приведет к полному падению отчета с ошибкой прав, даже если общий доступ к документу у пользователя есть.