Как запустить консоль запросов под пользователем и обойти ошибку безопасного режима?

Программист 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

При расследовании инцидентов с нехваткой прав доступа у конкретного пользователя часто возникает необходимость выполнить проблемный запрос непосредственно в его сеансе. Однако при попытке открыть внешнюю обработку (в частности, расширенную «Консоль запросов ИТС 2021») система блокирует запуск с критической ошибкой:

Ошибка при вызове конструктора (Файл): Установлен безопасный режим. Выполнение операции запрещено

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

Причины блокировки: почему возникает ошибка безопасного режима

Проанализируем механизм защиты платформы 1С:Предприятие. Даже если администратор предоставил пользователю роль с правом интерактивного открытия внешних отчетов и обработок, механизмы платформы и Библиотеки стандартных подсистем (БСП) принудительно открывают сторонние файлы в безопасном режиме.

В безопасном режиме действуют жесткие ограничения:

  1. Запрещены любые прямые обращения к файловой системе сервера и клиента через объект Файл.
  2. Заблокировано создание внешних COM-объектов.
  3. Запрещено выполнение системных команд операционной системы.
  4. Запрещена загрузка внешних компонент.

Версия «Консоль запросов ИТС 2021» содержит дополнительный функционал автоматического управления технологическим журналом текущего сеанса. При инициализации формы модуль обработки обращается к серверному конфигурационному файлу conf.cfg с помощью инструкции Новый Файл(...). Поскольку для сеанса пользователя действует безопасный режим, платформа мгновенно прерывает выполнение аварийным исключением.

Способ 1. Использование классической консоли запросов ИТС

Самое быстрое и действенное решение — отказаться от расширенной редакции консоли 2021 года в пользу классической версии консоли запросов с сайта ИТС. В базовой консоли отсутствует модуль интеграции с технологическим журналом, а также отсутствуют серверные вызовы конструктора Файл при открытии формы.

При открытии стандартной консоли безопасный режим не будет конфликтовать с модулем объекта, и обработка откроется штатно, предоставив возможность выполнить запрос от имени текущего пользователя.

Способ 2. Отключение проверки технологического журнала в коде консоли

Если необходимо использовать именно версию 2021 года (например, из-за удобного интерфейса или истории запросов), устраним конфликтный вызов в коде самой обработки. Для этого откроем обработку в конфигураторе и выполним следующие шаги:

  1. Перейдем в модуль формы обработки и найдем строку вызова процедуры инициализации журнала: ПолучитьПризнакВключенияЖурналаДляТекущегоСеанса.
  2. Обернем вызов или саму процедуру чтения конфигурационного файла в конструкцию перехвата исключений:

Попытка
    КаталогКонфигурацииПриложения = ПутьККонфигурационномуФайлу();
    // Чтение conf.cfg
Исключение
    // В безопасном режиме сбор ТЖ для сеанса отключается без падения обработки
    РезультатВключения = Ложь;
КонецПопытки;

После сохранения изменений обработка сможет запускаться в любом сеансе с безопасным режимом, пропуская недоступные сервисные функции.

Способ 3. Подключение консоли через расширение конфигурации

Платформа 1С:Предприятие не накладывает ограничения безопасного режима внешних файлов на объекты, входящие в состав конфигурации или расширений. Рассмотрим, как это применить:

  1. Создадим новое расширение конфигурации в режиме «Конфигуратор».
  2. В свойствах созданного расширения снимем флаг Безопасный режим.
  3. Добавим консоль запросов в ветку Обработки данного расширения.
  4. Обновим конфигурацию базы данных.

Теперь обработка доступна пользователю через меню «Функции для технического специалиста» (или общее командное интерфейсное меню) как полноценный встроенный объект метаданных.

Способ 4. Регистрация в справочнике «Дополнительные отчеты и обработки»

Если конфигурация построена на базе БСП, подключим консоль централизованно под учетной записью администратора:

  1. Откроем раздел НСИ и администрирование → Печатные формы, отчеты и обработки → Дополнительные отчеты и обработки.
  2. Создадим новую запись и выберем файл консоли запросов.
  3. В карточке регистрации снимем признак Безопасный режим (либо укажем необходимые разрешения на доступ к ресурсам, если включены профили безопасности кластера).
  4. В табличной части «Быстрый доступ» укажем нужного пользователя.

Как определить проблемную таблицу без использования консоли запросов

Если цель заключается исключительно в поиске объекта, на который пользователю не хватает прав, рассмотрим альтернативные методы диагностики, не требующие открытия интерактивных консолей.

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...), к которой был заблокирован доступ.

2. Программная проверка прав с помощью встроенного языка

Выясним проблемные объекты с помощью короткого исполняемого скрипта под администратором. Если известен список таблиц, используемых в отчете, проверим права целевого пользователя методом ПравоДоступа():


ПользовательПроверки = ПользователиИнформационнойБазы.НайтиПоИмени("ИмяПроблемногоПользователя");

Для Каждого Документ Из Метаданные.Документы Цикл
    Если Не ПравоДоступа("Чтение", Документ, ПользовательПроверки) Тогда
        Сообщить("Нет прав на чтение: " + Документ.ПолноеИмя());
    КонецЕсли;
КонецЦикла;

Для Каждого Регистр Из Метаданные.РегистрыСведений Цикл
    Если Не ПравоДоступа("Чтение", Регистр, ПользовательПроверки) Тогда
        Сообщить("Нет прав на чтение: " + Регистр.ПолноеИмя());
    КонецЕсли;
КонецЦикла;

3. Проверка директивы «РАЗРЕШЕННЫЕ» в запросе отчета

Если отчет разработан на основе схемы компоновки данных (СКД) или использует прямой запрос, проанализируем текст на наличие ключевого слова РАЗРЕШЕННЫЕ:


ВЫБРАТЬ РАЗРЕШЕННЫЕ
    ЗаказКлиента.Ссылка КАК Ссылка,
    ЗаказКлиента.СуммаДокумента КАК СуммаДокумента
ИЗ
    Документ.ЗаказКлиента КАК ЗаказКлиента

Если в запросе используется конструкция ВЫБРАТЬ без модификатора РАЗРЕШЕННЫЕ, а в системе настроены ограничения на уровне записей (RLS), попытка прочитать хотя бы одну недоступную строку приведет к полному падению отчета с ошибкой прав, даже если общий доступ к документу у пользователя есть.

← На главную