Как корректно настроить права для регламентных заданий в 1С, когда системный пользователь сбрасывает настройки?

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

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

Что такое "СлужебныйПользовательДляЗапускаРегламентныхЗаданий" и почему его права сбрасываются?

СлужебныйПользовательДляЗапускаРегламентныхЗаданий — это не обычный пользователь информационной базы, с которым работают конечные пользователи. Это системный предопределенный элемент, созданный для внутренней работы платформы и конфигурации. Его основная задача — служить "исполнителем" для регламентных и фоновых заданий, когда не указан конкретный пользователь. Такой подход обеспечивает стабильность и независимость выполнения системных операций от интерактивной работы пользователей.

Одна из ключевых особенностей этого служебного пользователя заключается в том, что его параметры, включая назначенные ему роли, могут автоматически управляться системой. Если вы попытаетесь вручную добавить или удалить роли этому пользователю через конфигуратор, вы, скорее всего, обнаружите, что эти изменения исчезают на следующий день или после выполнения определенных системных операций. Это происходит потому, что конфигурация или подсистемы (например, БСП) имеют встроенную логику, которая при определенных событиях автоматически восстанавливает предопределенное состояние системных объектов, к которым относится и этот служебный пользователь.

К таким событиям могут относиться:

  1. Обновление конфигурации: После обновления конфигурации (например, при выходе новой версии) система может сбрасывать настройки системных пользователей к стандартным значениям.
  2. Выполнение служебных регламентных заданий: Некоторые внутренние регламентные задания, такие как "Проверка подключения", могут выполнять операции по поддержанию целостности системных настроек. В процессе такой проверки они могут инициировать сброс или пересоздание прав служебного пользователя к его исходному системному состоянию. Несмотря на то, что задание "Проверка подключения" может быть невидимым в стандартном списке, оно является частью служебного функционала.
  3. Логика Библиотеки Стандартных Подсистем (БСП): БСП активно использует служебных пользователей для своего функционала. Встроенные механизмы БСП могут контролировать и сбрасывать права этого пользователя, чтобы гарантировать его корректную работу и предотвратить несанкционированные изменения.

Таким образом, попытки вручную настроить права этого пользователя обречены на провал, поскольку система будет постоянно возвращать его в исходное состояние, считая ваши изменения некорректными для системного объекта. Подробнее о механизмах работы подсистем можно узнать в справочнике по методам БСП.

Методы предоставления прав для выполнения регламентных заданий

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

  1. Метод 1: Назначение выделенного пользователя для регламентного задания

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

    Как это работает:

    1. Создание специализированного пользователя: Первым шагом будет создание нового пользователя в режиме 1С:Предприятие (раздел "Администрирование" -> "Настройки пользователей и прав" -> "Пользователи"). Назовите его, например, "ПользовательДляРассылок" или "СервисныйПользователь". Для этой задачи есть универсальная обработка администрирования прав и назначения ролей.
    2. Предоставление минимально необходимых прав: Мы должны назначить этому новому пользователю только те роли, которые абсолютно необходимы для выполнения нашего регламентного задания — для этого подойдёт универсальная настройка прав доступа и подбор ролей. Например, если задание отправляет рассылки, пользователю потребуются права на чтение и запись в справочник "Рассылки отчетов" (или аналогичный), а также на доступ к объектам, которые используются при формировании и отправке рассылок (например, справочники Контрагентов, Организаций, Документы и т.д.). Важно помнить принцип "минимальных привилегий".
    3. Назначение пользователя регламентному заданию: После создания и настройки прав, мы открываем список регламентных заданий (см. инструкцию ниже) и для конкретного задания, которое должно запускать рассылки, находим поле "Имя пользователя". В этом поле мы выбираем созданного нами специализированного пользователя. С этого момента регламентное задание будет выполняться от имени этого пользователя с его набором прав. Для проверки корректности настроек есть анализ прав и профилей пользователей в 1С.

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

  2. Метод 2: Выполнение кода в привилегированном режиме

    Этот метод применяется, когда код, выполняющий регламентное задание, находится в общем модуле, и мы хотим, чтобы он выполнялся без проверки прав доступа к некоторым объектам. Использование привилегированного режима означает, что система не будет проверять, есть ли у текущего пользователя (или пользователя, от имени которого запускается задание) права на доступ к объектам, с которыми работает код. Фактически, код выполняется с полными административными правами.

    Как это работает:

    1. Определение общего модуля: Мы находим общий модуль, в котором реализован метод, вызываемый регламентным заданием.
    2. Установка свойства "Привилегированный": В конфигураторе открываем свойства этого общего модуля и устанавливаем для него флаг "Привилегированный" (или Привилегированный = Истина).

    Пример (в свойствах общего модуля):

    
    // Для общего модуля "МодульРегламентногоЗадания"
    // Свойство "Привилегированный" установлено в Истина
    // или в коде:
    // УстановитьПривилегированныйРежим(Истина);
    

    После этого, любой код, исполняемый из этого общего модуля, будет выполняться в привилегированном режиме, обходя проверки прав. Если регламентное задание вызывает метод из такого привилегированного модуля, то для выполнения рассылок уже не будут требоваться специальные права у пользователя, от имени которого запускается регламентное задание (будь то СлужебныйПользовательДляЗапускаРегламентныхЗаданий или любой другой).

    Предостережения:

    Использование привилегированного режима снижает безопасность системы. Мы рекомендуем применять его только в тех случаях, когда другие методы (например, назначение выделенного пользователя) не применимы или слишком сложны в реализации. Всегда старайтесь минимизировать использование привилегированного режима и убедитесь, что код в таком модуле тщательно проверен и не содержит потенциальных уязвимостей, которые могут быть использованы для обхода ограничений безопасности.

Как найти и настроить регламентное задание в 1С:УХ 3.2?

Давайте пошагово разберем, как найти и настроить нужное регламентное задание в вашей системе 1С:Управление Холдингом 3.2, чтобы применить один из вышеописанных методов.

  1. Перейдем к списку регламентных заданий:

    В режиме предприятия откроем раздел "Администрирование". Далее нам потребуется найти пункт "Обслуживание" или "Поддержка и обслуживание" (точные названия могут незначительно отличаться в разных версиях конфигурации). В этом разделе мы увидим ссылку на "Регламентные и фоновые задания". Откроем ее.

  2. Найдем необходимое регламентное задание:

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

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

  3. Настроим пользователя для выполнения задания:

    В открывшейся форме свойств регламентного задания мы увидим различные параметры: расписание, состояние, дата последнего запуска и так далее. Нам нужен параметр "Имя пользователя". По умолчанию, если пользователь не указан, задание может выполняться от имени системного пользователя, такого как СлужебныйПользовательДляЗапускаРегламентныхЗаданий, или с полными правами в файловом режиме.

    Нажмите на кнопку выбора (обычно это кнопка с тремя точками или стрелкой вниз) рядом с полем "Имя пользователя". Откроется список пользователей информационной базы. Выберите пользователя, которого мы специально создали и настроили для выполнения этого задания (например, "ПользовательДляРассылок").

    Важно: убедитесь, что выбранный пользователь существует и имеет все необходимые роли для доступа к данным, с которыми работает регламентное задание (используйте средства на управление правами доступа и просмотр ролей — в этом поможет анализ прав доступа и ограничений RLS).

  4. Сохраним изменения:

    После выбора пользователя не забудьте нажать кнопку "Записать и закрыть" или "ОК", чтобы сохранить внесенные изменения в настройках регламентного задания.

Таким образом, мы успешно назначили конкретного пользователя для выполнения регламентного задания. С этого момента, при следующем запуске по расписанию, задание будет выполняться от имени выбранного пользователя, используя его набор прав доступа к данным. Это гарантирует стабильное выполнение заданий без конфликтов с системной логикой, которая управляет предопределенным служебным пользователем.

В случае, если вы выбрали метод с привилегированным режимом, никаких изменений в настройках регламентного задания в пользовательском режиме (поле "Имя пользователя") производить не требуется, так как права будут обеспечиваться на уровне кода.

← На главную