При интеграции двух информационных баз 1С через OLE/COM-соединение часто возникает задача авторизовать пользователя под его текущей доменной учетной записью (Active Directory) без повторного ввода логина и пароля. Попытки явно прописать доменного пользователя и пароль в параметрах Usr и Pwd строки подключения приводят к ошибке: «Идентификация пользователя не выполнена. Неправильное имя или пароль пользователя». Разберем причины такого поведения и рассмотрим правильные способы настройки подключения.
Параметры Usr и Pwd в строке инициализации подключения 1С предназначены исключительно для внутренней аутентификации платформы 1С:Предприятия. Когда платформа видит заполненные параметры Usr, она ищет пользователя с указанным точным именем в списке пользователей базы 1С и сверяет внутренний хэш пароля. Передача доменного имени вида ДОМЕН\Пользователь в параметр Usr воспринимается платформой как имя учетной записи 1С, а не доменная учетная запись Windows, что вызывает ошибку авторизации.
Платформа 1С:Предприятие поддерживает прозрачную сквозную аутентификацию средствами операционной системы. Чтобы подключение произошло автоматически под текущим пользователем Windows, необходимо полностью исключить параметры пользователя и пароля из строки подключения.
Проанализируем обязательные условия для успешного подключения:
DOMAIN\ivanov).&НаКлиенте).Посмотрим на пример правильного формирования строки подключения для файловой и клиент-серверной баз:
&НаКлиенте
Процедура ПодключитьсяКБазе()
// Создаем объект подключения
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С должна быть добавлена в список пользователей целевой базы с привязкой к аутентификации ОС и иметь полные права.
Если требуется вызывать процедуру интеграции на сервере от имени конкретной учетной записи без привязки к службе сервера 1С, целесообразно использовать стандартную аутентификацию платформы с выделенным техническим пользователем.
Разберем по шагам, как это реализовать:
COM_Exchange.Посмотрим на пример кода с авторизацией через служебного пользователя:
&НаСервере
Функция ПодключитьсяЧерезСлужебногоПользователя()
COMСоединитель = Новый COMОбъект("V83.COMConnector");
СтрокаПодключения = "Srvr=""sql-server"";Ref=""target_db"";Usr=""COM_Exchange"";Pwd=""StrongPassword123"";";
Попытка
Возврат COMСоединитель.Connect(СтрокаПодключения);
Исключение
ЗаписьЖурналаРегистрации("Интеграция COM", УровеньЖурналаРегистрации.Ошибка, , , ОписаниеОшибки());
ВызватьИсключение "Не удалось подключиться к целевой базе: " + ОписаниеОшибки();
КонецПопытки;
КонецФункции
Обратим внимание на выбор COM-объекта:
V83.Application — инициирует полноценный запуск клиентского приложения 1С, загружает пользовательский интерфейс и модули управляемого приложения. Это требует значительного объема оперативной памяти и времени.V83.COMConnector — легковесный внутрипроцессный сервер (библиотека comcntr.dll), который запускает только программное ядро без графической оболочки. Для программного обмена данными и выполнения запросов всегда предпочтительнее использовать V83.COMConnector.Платформа 1С:Предприятие 8.3 предоставляет более надежные и платформенно-независимые механизмы интеграции, которые не зависят от COM-библиотек операционной системы Windows и проблем с разрядностью (32/64 бит):