Как реализовать синхронизацию пользователей и паролей между различными базами 1С

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

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

Метод 1. Программная синхронизация через перенос хеша пароля

Наиболее очевидный путь, который мы разберем первым, — это программное копирование данных из справочника Пользователи одной базы в другую с сохранением пароля. Важно понимать, что платформа 1С не позволяет прочитать пароль в открытом виде, однако она предоставляет доступ к его хеш-значению. Это значение хранится в свойстве СохраняемоеЗначениеПароля объекта ПользовательИнформационнойБазы.

Рассмотрим алгоритм действий для реализации такой синхронизации:

  1. Выбираем или создаем «Мастер-базу», которая будет эталонным источником данных.
  2. В базе-приемнике создаем обработку, которая подключается к мастер-базе (например, через COM-соединение или HTTP-сервис).
  3. Считываем данные о пользователях и их системных параметрах.
  4. Создаем или обновляем пользователя в базе-приемнике, напрямую устанавливая хеш пароля.

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


// Пример создания пользователя с переносом хеша пароля
НовыйПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
НовыйПользовательИБ.Имя = "МарьяИванова";
НовыйПользовательИБ.ПолноеИмя = "Иванова Марья Ивановна";
НовыйПользовательИБ.АутентификацияСтандартная = Истина;

// Устанавливаем хеш, полученный из другой базы
// Хеш представляет собой строку Base64
НовыйПользовательИБ.СохраняемоеЗначениеПароля = "ХешПолученныйИзМастерБазы";

// Обязательно записываем пользователя
НовыйПользовательИБ.Записать();

Важное уточнение: Начиная с версии платформы 8.3.15, 1С использует более стойкий алгоритм хеширования (SHA-256). Если ваша мастер-база работает на старой платформе (например, 8.3.12), а база-приемник — на новой, прямой перенос СохраняемоеЗначениеПароля может не сработать из-за несовместимости форматов хеша. В этом случае платформе потребуется «увидеть» ввод реального пароля для пересчета хеша по новому алгоритму.

Метод 2. Централизованное управление пользователями через БСП

Если вы используете современные типовые конфигурации (БП 3.0, ERP, ЗУП 3.1), в них уже интегрирована Библиотека Стандартных Подсистем (БСП). Разберем, как задействовать подсистему «Централизованное управление пользователями». Данный механизм позволяет настроить одну базу как «Мастер-систему», которая будет автоматически рассылать изменения в справочнике Пользователи и их права (роли) в подчиненные узлы.

Для настройки этого механизма выполним следующие шаги:

Этот подход хорош тем, что он «из коробки» учитывает связь между системным пользователем ИБ и элементом справочника Пользователи, сохраняя ссылки (UUID) идентичными во всех базах. Это критически важно для корректной работы механизмов версионирования и бизнес-процессов.

Метод 3. Использование OpenID-аутентификации

Выясним, в чем преимущество технологии OpenID, которую предлагает платформа 1С. Этот метод позволяет одной базе выступать в роли «Провайдера аутентификации». В этом случае пароли вообще не нужно копировать. Когда пользователь пытается зайти в «Базу №2», система перенаправляет его на форму входа «Базы №1» (Провайдера). После успешного ввода пароля пользователь возвращается в целевую базу уже авторизованным.

Посмотрим на преимущества этого подхода:

  1. Единая точка управления: Пароль хранится и меняется только в одной базе.
  2. Безопасность: Хеши паролей не гуляют по сети между базами.
  3. Удобство: Реализуется концепция Single Sign-On (SSO) в рамках экосистемы 1С.

Для реализации OpenID все базы должны быть опубликованы на веб-сервере (Apache или IIS). В файле публикации default.vrd прописываются соответствующие параметры openid.

Метод 4. Интеграция с Active Directory (AD)

Рассмотрим ситуацию, когда в компании развернут домен Windows. Это самый надежный и профессиональный способ синхронизации. В этом случае в 1С мы не храним пароли вообще. В настройках пользователя ИБ мы просто указываем Аутентификация операционной системы и выбираем пользователя из домена.

Пример настройки через код:


ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени("Иванов");
ПользовательИБ.АутентификацияОС = Истина;
ПользовательИБ.ПользовательОС = "DOMAIN\Ivanov";
ПользовательИБ.АутентификацияСтандартная = Ложь; // Отключаем вход по паролю 1С
ПользовательИБ.Записать();

С точки зрения автоматизации, нам достаточно синхронизировать только соответствие ИмяПользователя 1С <-> Логин AD. Все вопросы сложности паролей, их смены и блокировки при увольнении сотрудника берет на себя системный администратор в контроллере домена.

Сравнительный анализ и риски

Проанализируем, какой метод выбрать в зависимости от ваших задач:

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

2. OpenID: Идеально для территориально распределенных баз, доступ к которым осуществляется через тонкий или веб-клиент. Требует стабильного веб-сервера.

3. Active Directory: Лучший выбор для корпоративного сектора. Позволяет управлять доступом ко всем базам «одним кликом» в консоли AD.

4. Внешние инструменты (OneScript): Если баз очень много (сотни), мы рекомендуем использовать скрипты на OneScript. Они позволяют через интерфейс rac/ras управлять пользователями на уровне кластера серверов, не заходя в конфигуратор и не запуская сеанс 1С. Это максимально быстрый способ массовой блокировки или создания учетных записей.

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

← На главную