Привилегированный режим в 1С 8.3: код, свойства модулей и параметр запуска
Содержание
Привилегированный режим 1С отключает проверку прав доступа для кода, который выполняется на сервере. Установить его можно тремя способами: вызвать в серверной процедуре УстановитьПривилегированныйРежим(Истина), поставить флажок «Привилегированный» у общего модуля или запустить весь сеанс с параметром /UsePrivilegedMode. Последний вариант работает только для пользователя с правом «Администрирование».
Режим нужен, когда пользователю с урезанной ролью надо прочитать или записать служебные данные, к которым у него нет доступа. Сам пользователь при этом прав не получает: привилегии есть только у конкретного фрагмента кода и только на время его работы. Механизм общий для платформы 8.3, от конфигурации (БП, ЗУП, УТ) он не зависит.
Что происходит с правами, когда режим включён
В обычном сеансе платформа проверяет каждое обращение к данным. Нет права «Чтение» на регистр — запрос упадёт с ошибкой. Настроено ограничение на уровне записей (RLS) — пользователь увидит только «свои» строки.
В привилегированном режиме эти проверки пропускаются:
- 🔓 права ролей на объекты (чтение, добавление, изменение, удаление, проведение) не проверяются;
- 🔓 ограничения доступа на уровне записей и полей (RLS) не накладываются;
- 🔓 запросы возвращают все строки таблицы, а не только разрешённые.
Что остаётся неизменным:
- 🔒 пользователь сеанса — тот же,
ПользователиИнформационнойБазы.ТекущийПользователь()вернёт его, а журнал регистрации запишет действия от его имени; - 🔒 интерфейс не меняется: новые разделы и команды не появятся, если речь о режиме в коде;
- 🔒 безопасный режим, установленный для внешней обработки или расширения, никуда не девается.
Привилегированный режим действует только в серверном контексте. На клиенте данных базы нет, поэтому и проверять там нечего — метод УстановитьПривилегированныйРежим в клиентском модуле недоступен.
Узнать, включён ли режим в текущей точке кода, можно функцией ПривилегированныйРежим(). Она возвращает Истина или Ложь. Это удобно в отладке и в общих процедурах, которые вызываются из разных мест.
Привилегированный режим и монопольный: не путайте
Названия похожи, и их часто путают в вопросах на форумах. Это два разных механизма с разными задачами.
| Признак | Привилегированный режим | Монопольный режим |
|---|---|---|
| Что делает | Отключает проверку прав для кода | Не пускает в базу других пользователей |
| На кого влияет | Только на текущий сеанс или фрагмент кода | На всех, кто пытается подключиться |
| Как включить | УстановитьПривилегированныйРежим(Истина), привилегированный модуль, /UsePrivilegedMode | УстановитьМонопольныйРежим(Истина) или запуск при отсутствии других сеансов |
| Нужен ли выход всех пользователей | Нет | Да, других сеансов быть не должно |
| Типичная задача | Прочитать служебный регистр под ограниченной ролью | Обновление структуры, загрузка .dt, тестирование и исправление |
| Какое право требуется | Для кода — никакого; для параметра запуска — «Администрирование» | «Монопольный режим» |
Если коротко: монопольный режим отвечает на вопрос «кто ещё в базе», привилегированный — «что этому коду разрешено». Они не заменяют друг друга. Администратор, который «зашёл в привилегированном режиме», всё равно не сможет обновить конфигурацию базы данных, пока в ней работают другие.
Как установить привилегированный режим в 1С: четыре способа
Способ 1. Метод УстановитьПривилегированныйРежим в коде
Самый точный вариант: привилегии получает только нужный кусок кода. Вызов ставят в серверной процедуре и сразу после работы с данными снимают.
&НаСервереБезКонтекста
Функция КурсВалютыНаДату(Валюта, Дата)
УстановитьПривилегированныйРежим(Истина);
Попытка
Данные = РегистрыСведений.КурсыВалют.ПолучитьПоследнее(Дата,
Новый Структура("Валюта", Валюта));
УстановитьПривилегированныйРежим(Ложь);
Исключение
УстановитьПривилегированныйРежим(Ложь);
ВызватьИсключение;
КонецПопытки;
Возврат Данные.Курс;
КонецФункции
Два правила, которые держат такой код в порядке:
- Вызовы считаются. Если режим включили дважды (например, вложенная процедура тоже вызвала
Истина), для полного отключения нужно столько же вызовов сЛожь. - При выходе из процедуры, где режим был включён, платформа снимает его сама. Явный вызов
Ложьвсё равно пишите: он сужает зону привилегий до нескольких строк, а не до всей процедуры.
Не возвращайте на клиент «сырые» данные, полученные в привилегированном режиме. Отдавайте только то, что пользователь имеет право видеть: итоговую сумму, флаг, курс. Иначе обход прав превращается в утечку.
Способ 2. Привилегированный общий модуль
У серверного общего модуля в палитре свойств есть флажок «Привилегированный». Весь код такого модуля выполняется без проверки прав, вызывать УстановитьПривилегированныйРежим внутри не нужно.
Как включить:
- Откройте
Конфигуратор → Конфигурация → Открыть конфигурацию. - В дереве раскройте
Общие → Общие модулии выберите модуль. - В палитре свойств установите флажок «Сервер», затем «Привилегированный».
- Сохраните конфигурацию и выполните
Конфигурация → Обновить конфигурацию базы данных(F7).
Флажок доступен только для модулей, которые выполняются на сервере. В модулях с признаком «Клиент (управляемое приложение)» его нет.
В типовых конфигурациях на БСП такие модули узнаются по суффиксу ПолныеПрава в имени. Удобная договорённость и для своих доработок: по имени сразу видно, что код внутри обходит права.
Способ 3. Свойства документа при проведении
У документа в конфигураторе есть два свойства: «Привилегированный режим при проведении» и «Привилегированный режим при отмене проведения». Их видно в палитре свойств документа.
Когда флажки стоят, обработчики проведения и формирование движений идут без проверки прав. Пользователю не нужно право на изменение каждого регистра, в который пишет документ, — достаточно права на проведение самого документа. В типовых конфигурациях эти флажки, как правило, уже включены.
Способ 4. Запуск сеанса с параметром /UsePrivilegedMode
Весь сеанс становится привилегированным: пользователь видит все данные без ограничений RLS. Режим доступен только тем, у кого в ролях есть право «Администрирование».
Командная строка:
"C:\Program Files\1cv8\common\1cestart.exe" ENTERPRISE /F"D:\Bases\Buh" /N"Администратор" /P"пароль" /UsePrivilegedMode
Без командной строки, через окно запуска:
- Выделите базу в списке и нажмите «Изменить».
- Пройдите мастер до последней страницы.
- В поле «Дополнительные параметры запуска» впишите
/UsePrivilegedModeи нажмите «Готово».
Установку привилегированного сеанса и отказ в ней платформа фиксирует в журнале регистрации. Это позволяет потом выяснить, кто и когда входил с обходом прав.
Для разовой проверки не меняйте свойства базы в общем списке. Создайте отдельный ярлык с параметром — меньше шансов, что про привилегированный вход забудут на месяцы.
Какой способ выбрать
| Способ | Когда подходит | Риски |
|---|---|---|
УстановитьПривилегированныйРежим | Точечный обход прав в нескольких строках | Забыть снять режим или вернуть лишние данные клиенту |
| Привилегированный общий модуль | Набор служебных функций, которые всегда работают с полными правами | Любой новый метод в модуле тоже получает привилегии |
| Свойства документа | Проведение документов при узких ролях | Почти нет, поведение типовое |
/UsePrivilegedMode | Разбор проблем с данными под администратором | Весь сеанс без ограничений RLS |
Какие права и настройки нужны в конфигураторе
Отдельного права «Привилегированный режим» у ролей нет. Права распределяются так:
- 👤 Вызов в коде и привилегированные модули — права не требуются. Если код выполняется на сервере и не находится в безопасном режиме, он может включить режим под любым пользователем. Поэтому контролируют не роль, а сам код: кто и что пишет в серверные модули.
- 👤 Параметр
/UsePrivilegedMode— нужно право «Администрирование» на корне конфигурации. Проверить:Конфигурация → Общие → Роли, откройте роль, выделите в дереве корень конфигурации и найдите право в списке справа. - 👤 Проведение документов — права на сам документ («Проведение», «Отмена проведения») всё равно нужны; флажки привилегированного режима снимают только проверку прав на регистры.
Для пользователей типовой конфигурации роли назначают не в конфигураторе, а в режиме предприятия: Администрирование → Настройки пользователей и прав. Право «Администрирование» входит в профиль «Администратор». Давать его бухгалтеру ради одного отчёта нельзя — это доступ к управлению всей базой.
Когда привилегированный режим нужен на практике
Типичные задачи, где без него не обойтись:
- Служебные регистры. Пользователь заполняет документ, а код должен прочитать настройки учёта или константу, к которой у его роли нет доступа.
- Нумерация и счётчики. Код получает очередной номер из служебного регистра, который пользователь видеть не должен.
- Запись в журнал собственных событий. Доработка пишет лог в регистр сведений , на который у пользователей нет права изменения.
- Регламентные задания. Задание работает под указанным пользователем; если у него урезанные права, нужные операции оборачивают в привилегированный режим.
- Разбор «пропавших» данных. Пользователь жалуется, что не видит документ. Администратор входит с
/UsePrivilegedModeи проверяет, существует ли документ вообще или его скрывает RLS. - Проверка ограничений доступа. Сравнение двух сеансов — обычного и привилегированного — быстро показывает, какие строки отрезает ограничение на уровне записей.
УстановитьПривилегированныйРежим(Истина) с обязательным Ложь сразу после чтения. На клиент верните только результат.ПолныеПрава.Где привилегированный режим опасен
Режим отключает защиту. Ошибка в таком коде видна сразу всем пользователям, а не одному.
Не включайте привилегированный режим в коде, который выполняет запросы или выражения, полученные от пользователя. Например, в «универсальной консоли запросов», доступной рядовым сотрудникам. Через неё любой прочитает зарплаты и персональные данные.
Чего избегать:
- ❌ включать режим в начале большой процедуры «на всякий случай»;
- ❌ ставить флажок «Привилегированный» общему модулю, в котором лежат и служебные, и обычные функции;
- ❌ держать
/UsePrivilegedModeв ярлыке, которым пользуются каждый день; - ❌ передавать на клиент выборку целиком вместо нужного значения.
Внешние обработки и расширения, подключённые в безопасном режиме, установить привилегированный режим не могут — платформа это запрещает. Не снимайте безопасный режим у сторонней обработки ради того, чтобы она «заработала»: сначала разберитесь, какие данные ей нужны.
Ошибки и как их устранить
&НаКлиенте. Перенесите работу с данными в процедуру &НаСервере или &НаСервереБезКонтекста и вызывайте её с клиента.ПривилегированныйРежим(), что режим действительно активен в точке ошибки. Частые причины: обращение к данным идёт уже после вызова Ложь, ошибка возникает на клиенте при открытии формы, либо код выполняется в безопасном режиме.Истина…Ложь до одного запроса и отдавайте только итоговое значение.Если ошибка появилась после обновления типовой конфигурации, сравните свои доработки с новой версией. Обновление может снять флажки у изменённых объектов или перенести код в другой модуль.
Частые вопросы
Видно ли в журнале регистрации, что код работал в привилегированном режиме?
Даёт ли привилегированный режим доступ к Конфигуратору?
Можно ли включить режим для одного пользователя навсегда?
/UsePrivilegedMode в его ярлыке и только при праве «Администрирование». Для рядового пользователя правильный путь — расширить роль.