Как настроить COM-соединение в 1С с использованием Windows-аутентификации без указания логина и пароля?

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

При интеграции двух информационных баз 1С через OLE/COM-соединение часто возникает задача авторизовать пользователя под его текущей доменной учетной записью (Active Directory) без повторного ввода логина и пароля. Попытки явно прописать доменного пользователя и пароль в параметрах Usr и Pwd строки подключения приводят к ошибке: «Идентификация пользователя не выполнена. Неправильное имя или пароль пользователя». Разберем причины такого поведения и рассмотрим правильные способы настройки подключения.

Причина ошибки при явном указании доменных учетных данных

Параметры Usr и Pwd в строке инициализации подключения 1С предназначены исключительно для внутренней аутентификации платформы 1С:Предприятия. Когда платформа видит заполненные параметры Usr, она ищет пользователя с указанным точным именем в списке пользователей базы 1С и сверяет внутренний хэш пароля. Передача доменного имени вида ДОМЕН\Пользователь в параметр Usr воспринимается платформой как имя учетной записи 1С, а не доменная учетная запись Windows, что вызывает ошибку авторизации.

Решение 1: Сквозная доменная аутентификация Windows (без параметров Usr и Pwd)

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

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

  1. В целевой информационной базе должен существовать пользователь 1С, у которого установлен флаг «Аутентификация операционной системы» и прописан соответствующий пользователь Windows (например, DOMAIN\ivanov).
  2. Пользователь операционной системы, запустивший сеанс 1С, должен иметь права на запуск целевой базы.
  3. Вызов кода инициализации COM-объекта должен производиться в контексте клиента (например, в процедуре с директивой &НаКлиенте).

Посмотрим на пример правильного формирования строки подключения для файловой и клиент-серверной баз:


&НаКлиенте
Процедура ПодключитьсяКБазе()
    // Создаем объект подключения
    V83 = Новый COMОбъект("V83.Application");
    
    // Для файловой базы:
    СтрокаПодключения = "File=""C:\Bases\TargetBase"";";
    
    // Для клиент-серверной базы:
    // СтрокаПодключения = "Srvr=""app-server"";Ref=""target_base"";";
    
    Попытка
        Подключение = V83.Connect(СтрокаПодключения);
        Сообщить("Подключение успешно установлено под текущей учетной записью Windows!");
    Исключение
        Сообщить("Ошибка подключения: " + ОписаниеОшибки());
    КонецПопытки;
КонецПроцедуры

Особенности выполнения подключения на стороне сервера

Разберем важный нюанс: если аналогичный код подключения без параметров Usr и Pwd вызвать на стороне сервера (директива &НаСервере или регламентное задание), аутентификация будет происходить не от имени пользователя за компьютером, а от имени системной службы кластера серверов 1С (по умолчанию учетная запись USR1CV8 или NT AUTHORITY\SYSTEM).

Чтобы такое серверное подключение завершилось успешно, учетная запись службы сервера 1С должна быть добавлена в список пользователей целевой базы с привязкой к аутентификации ОС и иметь полные права.

Решение 2: Использование выделенного служебного пользователя

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

Разберем по шагам, как это реализовать:

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

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


&НаСервере
Функция ПодключитьсяЧерезСлужебногоПользователя()
    COMСоединитель = Новый COMОбъект("V83.COMConnector");
    
    СтрокаПодключения = "Srvr=""sql-server"";Ref=""target_db"";Usr=""COM_Exchange"";Pwd=""StrongPassword123"";";
    
    Попытка
        Возврат COMСоединитель.Connect(СтрокаПодключения);
    Исключение
        ЗаписьЖурналаРегистрации("Интеграция COM", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
        ВызватьИсключение "Не удалось подключиться к целевой базе: " + ОписаниеОшибки();
    КонецПопытки;
КонецФункции

Оптимизация: V83.Application против V83.COMConnector

Обратим внимание на выбор COM-объекта:

  1. V83.Application — инициирует полноценный запуск клиентского приложения 1С, загружает пользовательский интерфейс и модули управляемого приложения. Это требует значительного объема оперативной памяти и времени.
  2. V83.COMConnector — легковесный внутрипроцессный сервер (библиотека comcntr.dll), который запускает только программное ядро без графической оболочки. Для программного обмена данными и выполнения запросов всегда предпочтительнее использовать V83.COMConnector.

Современные альтернативы OLE/COM-технологиям

Платформа 1С:Предприятие 8.3 предоставляет более надежные и платформенно-независимые механизмы интеграции, которые не зависят от COM-библиотек операционной системы Windows и проблем с разрядностью (32/64 бит):

  1. HTTP-сервисы и REST API (OData): позволяют передавать структурированные данные по протоколам HTTP/HTTPS, поддерживают базовую аутентификацию и не блокируют ресурсы базы.
  2. Web-сервисы (SOAP): обеспечивают строгую типизацию данных и стандартизированный вызов удаленных процедур.
  3. Планы обмена и формат EnterpriseData: готовый механизм для организации асинхронного обмена данными между конфигурациями 1С.
← На главную