Как подключиться через COMConnector к файловой базе 1С в сетевой папке при ошибке авторизации Windows?

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

При организации интеграции между конфигурациями 1С часто используется программное подключение через COM-соединение с помощью объекта V83.COMConnector. Однако при попытке подключиться к файловой информационной базе, расположенной на удаленном компьютере или сервере вне домена, разработчики регулярно сталкиваются с системной ошибкой доступа к файлам.

Проанализируем типовую ситуацию: в коде 1С выполняется попытка инициализации подключения к сетевому ресурсу:


COMConnector = Новый COMОбъект("V83.COMConnector");
V8 = COMConnector.Connect("File=""\\192.168.17.20\buhdb""; Usr=""User""; Pwd=""Password"";");

В результате выполнения этого кода возникает исключение:

Ошибка при выполнении файловой операции '\\192.168.17.20\buhdb\1Cv8.cdn'. 1326(0x0000052E): Вход в систему не произведен: имя пользователя или пароль не опознаны.

Выясним причину такого поведения и разберем по шагам все способы решения этой проблемы.

Причина возникновения ошибки 1326 (0x0000052E)

Разберем природу возникшей ошибки. Параметры Usr и Pwd в строке подключения Connect предназначены исключительно для внутренней аутентификации пользователя в самой базе данных 1С:Предприятия. В платформе 1С отсутствуют штатные параметры для передачи логина и пароля учетной записи операционной системы.

Ошибка 1326 генерируется операционной системой Windows на сетевом уровне (протокол SMB) еще до того, как платформа 1С приступает к проверке пользователя информационной базы. При попытке прочитать файл блокировок 1Cv8.cdn или файл таблиц 1Cv8.1CD по UNC-пути операционная система запрашивает учетные данные для доступа к общему сетевому ресурсу. Если компьютеры находятся в рабочей группе (не в домене) или у текущего пользователя Windows нет прав на сетевую папку, соединение аварийно завершается.

Способ 1. Предварительная сетевая авторизация через команду net use

Рассмотрим самый простой и быстрый способ решения задачи непосредственно из программного кода 1С. Перед вызовом метода Connect мы можем выполнить системную команду авторизации на удаленном сетевом ресурсе с помощью встроенной утилиты Windows net use.

Посмотрим на пример реализации в коде:


// Выполняем предварительную авторизацию на сетевом ресурсе Windows
КомандаСистемы("net use \\192.168.17.20\buhdb /user:ИмяПользователя Пароль");

// Выполняем стандартное подключение через COM-соединение
COMConnector = Новый COMОбъект("V83.COMConnector");
ПараметрыПодключения = "File=""\\192.168.17.20\buhdb""; Usr=""User""; Pwd=""Password"";";
V8 = COMConnector.Connect(ПараметрыПодключения);

После выполнения команды net use в текущей пользовательской сессии создается авторизованное сетевое подключение к серверу, и последующее обращение COM-объекта к файлам базы проходит успешно.

Способ 2. Подключение сетевой папки через COM-объект WScript.Network

Использование метода КомандаСистемы может приводить к кратковременному появлению консольного окна командной строки (cmd.exe), что не всегда удобно пользователям. Разберем более аккуратный программный подход с использованием COM-объекта WScript.Network.

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


СетевойДиск = Новый COMОбъект("WScript.Network");
Попытка
    // Подключаем сетевую папку как локальный диск Z:
    СетевойДиск.MapNetworkDrive("Z:", "\\192.168.17.20\buhdb", Ложь, "ИмяПользователяОС", "ПарольОС");
Исключение
    // Диск уже может быть подключен в сессии, продолжаем работу
КонецПопытки;

COMConnector = Новый COMОбъект("V83.COMConnector");
// Обращаемся к базе как к локальному каталогу
V8 = COMConnector.Connect("File=""Z:""; Usr=""User""; Pwd=""Password"";");

// При необходимости после завершения работы диск можно отключить:
// СетевойДиск.RemoveNetworkDrive("Z:", Истина, Истина);

Способ 3. Сохранение учетных данных в Windows (cmdkey)

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

Разберем порядок действий:

  1. Открываем командную строку Windows под пользователем, который запускает 1С.
  2. Выполняем системную команду сохранения сетевых реквизитов: cmdkey /add:192.168.17.20 /user:ИмяПользователяОС /pass:ПарольОС
  3. После сохранения учетных данных операционная система будет автоматически и прозрачно передавать сохраненные имя и пароль при любом обращении к адресу \\192.168.17.20, включая вызовы из V83.COMConnector.

Способ 4. Настройка одинаковых учетных записей (NTLM Pass-through)

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

Важные особенности при работе на стороне сервера 1С

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

  1. Служба сервера 1С (процесс ragent.exe / rphost.exe) функционирует в изолированной нулевой сессии под системной учетной записью (по умолчанию usr1cv8). Ей недоступны сетевые диски и кэш паролей интерактивных пользователей.
  2. Для работы серверного кода учетные данные через cmdkey необходимо добавлять именно от имени пользователя службы usr1cv8, либо запускать службу сервера от учетной записи, обладающей прямым доступом к сетевой папке.
  3. Разрядность библиотеки comcntr.dll (x86 или x64) должна строго совпадать с разрядностью процесса, выполняющего вызов. Для 64-битного сервера 1С требуется регистрация 64-битного COM-коннектора.

Рекомендации по надежности и безопасности

Прямое подключение по протоколу SMB к файловой базе данных 1С через сетевые папки несет в себе риски повреждения файла 1Cv8.1CD при сетевых сбоях и нестабильности канала связи. Для стабильной интеграции рекомендуется рассмотреть следующие альтернативы:

  1. Публикация файловой базы на веб-сервере (IIS / Apache): базу публикуют локально на том компьютере, где она расположена, а обмен реализуют через HTTP-сервисы, Web-сервисы (SOAP) или стандартный интерфейс OData. В этом случае сетевые папки не используются вовсе, а авторизация передается по защищенному протоколу HTTP.
  2. Перевод базы в клиент-серверный режим (СУБД): при использовании сервера 1С подключение через COM-коннектор выполняется по сетевому протоколу кластера (строка вида Srvr="ServerName"; Ref="BaseName";), что исключает необходимость работы с файловой системой удаленного компьютера.
← На главную