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

· 9 мин

Содержание

Привилегированный режим 1С отключает проверку прав доступа для кода, который выполняется на сервере. Установить его можно тремя способами: вызвать в серверной процедуре УстановитьПривилегированныйРежим(Истина), поставить флажок «Привилегированный» у общего модуля или запустить весь сеанс с параметром /UsePrivilegedMode. Последний вариант работает только для пользователя с правом «Администрирование».

Режим нужен, когда пользователю с урезанной ролью надо прочитать или записать служебные данные, к которым у него нет доступа. Сам пользователь при этом прав не получает: привилегии есть только у конкретного фрагмента кода и только на время его работы. Механизм общий для платформы 8.3, от конфигурации (БП, ЗУП, УТ) он не зависит.

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

В обычном сеансе платформа проверяет каждое обращение к данным. Нет права «Чтение» на регистр — запрос упадёт с ошибкой. Настроено ограничение на уровне записей (RLS) — пользователь увидит только «свои» строки.

В привилегированном режиме эти проверки пропускаются:

  • 🔓 права ролей на объекты (чтение, добавление, изменение, удаление, проведение) не проверяются;
  • 🔓 ограничения доступа на уровне записей и полей (RLS) не накладываются;
  • 🔓 запросы возвращают все строки таблицы, а не только разрешённые.

Что остаётся неизменным:

  • 🔒 пользователь сеанса — тот же, ПользователиИнформационнойБазы.ТекущийПользователь() вернёт его, а журнал регистрации запишет действия от его имени;
  • 🔒 интерфейс не меняется: новые разделы и команды не появятся, если речь о режиме в коде;
  • 🔒 безопасный режим, установленный для внешней обработки или расширения, никуда не девается.

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

Узнать, включён ли режим в текущей точке кода, можно функцией ПривилегированныйРежим(). Она возвращает Истина или Ложь. Это удобно в отладке и в общих процедурах, которые вызываются из разных мест.

Привилегированный режим и монопольный: не путайте

Названия похожи, и их часто путают в вопросах на форумах. Это два разных механизма с разными задачами.

ПризнакПривилегированный режимМонопольный режим
Что делаетОтключает проверку прав для кодаНе пускает в базу других пользователей
На кого влияетТолько на текущий сеанс или фрагмент кодаНа всех, кто пытается подключиться
Как включитьУстановитьПривилегированныйРежим(Истина), привилегированный модуль, /UsePrivilegedModeУстановитьМонопольныйРежим(Истина) или запуск при отсутствии других сеансов
Нужен ли выход всех пользователейНетДа, других сеансов быть не должно
Типичная задачаПрочитать служебный регистр под ограниченной рольюОбновление структуры, загрузка .dt, тестирование и исправление
Какое право требуетсяДля кода — никакого; для параметра запуска — «Администрирование»«Монопольный режим»

Если коротко: монопольный режим отвечает на вопрос «кто ещё в базе», привилегированный — «что этому коду разрешено». Они не заменяют друг друга. Администратор, который «зашёл в привилегированном режиме», всё равно не сможет обновить конфигурацию базы данных, пока в ней работают другие.

Как установить привилегированный режим в 1С: четыре способа

Способ 1. Метод УстановитьПривилегированныйРежим в коде

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

&НаСервереБезКонтекста
Функция КурсВалютыНаДату(Валюта, Дата)

    УстановитьПривилегированныйРежим(Истина);
    Попытка
        Данные = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(Дата,
            Новый Структура("Валюта", Валюта));
        УстановитьПривилегированныйРежим(Ложь);
    Исключение
        УстановитьПривилегированныйРежим(Ложь);
        ВызватьИсключение;
    КонецПопытки;

    Возврат Данные.Курс;

КонецФункции

Два правила, которые держат такой код в порядке:

  1. Вызовы считаются. Если режим включили дважды (например, вложенная процедура тоже вызвала Истина), для полного отключения нужно столько же вызовов с Ложь.
  2. При выходе из процедуры, где режим был включён, платформа снимает его сама. Явный вызов Ложь всё равно пишите: он сужает зону привилегий до нескольких строк, а не до всей процедуры.

Не возвращайте на клиент «сырые» данные, полученные в привилегированном режиме. Отдавайте только то, что пользователь имеет право видеть: итоговую сумму, флаг, курс. Иначе обход прав превращается в утечку.

Способ 2. Привилегированный общий модуль

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

Как включить:

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

Флажок доступен только для модулей, которые выполняются на сервере. В модулях с признаком «Клиент (управляемое приложение)» его нет.

В типовых конфигурациях на БСП такие модули узнаются по суффиксу ПолныеПрава в имени. Удобная договорённость и для своих доработок: по имени сразу видно, что код внутри обходит права.

Способ 3. Свойства документа при проведении

У документа в конфигураторе есть два свойства: «Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения». Их видно в палитре свойств документа.

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

Способ 4. Запуск сеанса с параметром /UsePrivilegedMode

Весь сеанс становится привилегированным: пользователь видит все данные без ограничений RLS. Режим доступен только тем, у кого в ролях есть право «Администрирование».

Командная строка:

"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /UsePrivilegedMode

Без командной строки, через окно запуска:

  1. Выделите базу в списке и нажмите «Изменить».
  2. Пройдите мастер до последней страницы.
  3. В поле «Дополнительные параметры запуска» впишите /UsePrivilegedMode и нажмите «Готово».

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

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

Какой способ выбрать

СпособКогда подходитРиски
УстановитьПривилегированныйРежимТочечный обход прав в нескольких строкахЗабыть снять режим или вернуть лишние данные клиенту
Привилегированный общий модульНабор служебных функций, которые всегда работают с полными правамиЛюбой новый метод в модуле тоже получает привилегии
Свойства документаПроведение документов при узких роляхПочти нет, поведение типовое
/UsePrivilegedModeРазбор проблем с данными под администраторомВесь сеанс без ограничений RLS

Какие права и настройки нужны в конфигураторе

Отдельного права «Привилегированный режим» у ролей нет. Права распределяются так:

  • 👤 Вызов в коде и привилегированные модули — права не требуются. Если код выполняется на сервере и не находится в безопасном режиме, он может включить режим под любым пользователем. Поэтому контролируют не роль, а сам код: кто и что пишет в серверные модули.
  • 👤 Параметр /UsePrivilegedMode — нужно право «Администрирование» на корне конфигурации. Проверить: Конфигурация → Общие → Роли, откройте роль, выделите в дереве корень конфигурации и найдите право в списке справа.
  • 👤 Проведение документов — права на сам документ («Проведение», «Отмена проведения») всё равно нужны; флажки привилегированного режима снимают только проверку прав на регистры.

Для пользователей типовой конфигурации роли назначают не в конфигураторе, а в режиме предприятия: Администрирование → Настройки пользователей и прав. Право «Администрирование» входит в профиль «Администратор». Давать его бухгалтеру ради одного отчёта нельзя — это доступ к управлению всей базой.

Когда привилегированный режим нужен на практике

Типичные задачи, где без него не обойтись:

  1. Служебные регистры. Пользователь заполняет документ, а код должен прочитать настройки учёта или константу, к которой у его роли нет доступа.
  2. Нумерация и счётчики. Код получает очередной номер из служебного регистра, который пользователь видеть не должен.
  3. Запись в журнал собственных событий. Доработка пишет лог в регистр сведений , на который у пользователей нет права изменения.
  4. Регламентные задания. Задание работает под указанным пользователем; если у него урезанные права, нужные операции оборачивают в привилегированный режим.
  5. Разбор «пропавших» данных. Пользователь жалуется, что не видит документ. Администратор входит с /UsePrivilegedMode и проверяет, существует ли документ вообще или его скрывает RLS.
  6. Проверка ограничений доступа. Сравнение двух сеансов — обычного и привилегированного — быстро показывает, какие строки отрезает ограничение на уровне записей.
Как дать коду доступ к данным, которые закрыты для роли?

Где привилегированный режим опасен

Режим отключает защиту. Ошибка в таком коде видна сразу всем пользователям, а не одному.

Не включайте привилегированный режим в коде, который выполняет запросы или выражения, полученные от пользователя. Например, в «универсальной консоли запросов», доступной рядовым сотрудникам. Через неё любой прочитает зарплаты и персональные данные.

Чего избегать:

  • ❌ включать режим в начале большой процедуры «на всякий случай»;
  • ❌ ставить флажок «Привилегированный» общему модулю, в котором лежат и служебные, и обычные функции;
  • ❌ держать /UsePrivilegedMode в ярлыке, которым пользуются каждый день;
  • ❌ передавать на клиент выборку целиком вместо нужного значения.

Внешние обработки и расширения, подключённые в безопасном режиме, установить привилегированный режим не могут — платформа это запрещает. Не снимайте безопасный режим у сторонней обработки ради того, чтобы она «заработала»: сначала разберитесь, какие данные ей нужны.

Ошибки и как их устранить

Диагностика: выберите симптом

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

Частые вопросы

Видно ли в журнале регистрации, что код работал в привилегированном режиме?
Действия записываются от имени пользователя сеанса. Отдельно фиксируется установка привилегированного сеанса через параметр запуска и отказ в ней.
Даёт ли привилегированный режим доступ к Конфигуратору?
Нет. Режим касается только проверки прав на данные в режиме 1С:Предприятие. Вход в Конфигуратор регулирует право «Администрирование» и параметры пользователя.
Можно ли включить режим для одного пользователя навсегда?
Только через /UsePrivilegedMode в его ярлыке и только при праве «Администрирование». Для рядового пользователя правильный путь — расширить роль.
Работает ли привилегированный режим в файловой базе?
Да. Механизм не зависит от варианта работы: файловая и клиент-серверная база ведут себя одинаково.
Влияет ли режим на скорость запросов?
Запросы без ограничений RLS обычно выполняются быстрее, потому что платформа не добавляет в них условия доступа. Но включать режим ради скорости — плохая идея: проблему производительности RLS решают оптимизацией ограничений.