Как настроить подключение из 1С к MS SQL Server и исправить ошибку авторизации пользователя

Программист IT и автоматизация бизнеса
← На главную

При организации прямого взаимодействия платформы 1С с СУБД MS SQL Server посредством ADO/OLE DB разработчики часто сталкиваются с ошибкой входа пользователя. Разберем причинно-следственные связи этой проблемы, выясним разницу между типами аутентификации и составим правильную строку подключения.

Причины возникновения ошибки входа при подключении

Разберем типичную ситуацию: при выполнении кода в 1С возникает ошибка вида "Ошибка входа пользователя...". При этом имя сервера и базы данных могут быть указаны верно, а сам пользователь успешно работает в среде операционной системы или менеджменте MS SQL Server Management Studio.

Выясним главные причины появления такой ошибки:

  1. Смешивание типов аутентификации: попытка передать учетную запись Windows в качестве SQL-логина без соответствующей настройки строки соединения.
  2. Проверка прав не на том уровне: учетная запись присутствует в списке пользователей конкретной базы данных (User), но отсутствует на уровне безопасности всего сервера СУБД (Login).
  3. Отсутствие пароля при явном указании параметров входа: если в строке соединения явно заданы параметры UID и PWD, но используется доменное имя (например, DOMAIN\User), СУБД ожидают проверку SQL-аутентификации, которая завершается сбоем.

Различие между Windows-аутентификацией и SQL-авторизацией

Проанализируем, как MS SQL Server разделяет механизмы авторизации:

1. Windows Authentication (Виндовая авторизация): аутентификация выполняется средствами операционной системы или домена Active Directory. В этом случае MS SQL Server доверяет учетным данным текущей сессии операционной системы. Передавать логин и пароль в явном виде в строке подключения не требуется.

2. SQL Server Authentication (Скульная авторизация): учетные записи создаются и хранятся непосредственно внутри MS SQL Server. Для подключения обязательно требуется передать логин (UID) и пароль (PWD). Для работы этого режима в настройках MS SQL Server должен быть включен смешанный режим аутентификации (Mixed Mode / Windows and SQL Server Authentication Mode).

Важно помнить: проверка имени входа осуществляется в ветке Безопасность -> Имена входа (Security -> Logins) на уровне экземпляра сервера, а не только внутри узла конкретной базы данных.

Формирование строки подключения с аутентификацией Windows

Если для подключения к MS SQL Server используется доменная или локальная учетная запись Windows, из строки соединения необходимо удалить параметры UID и PWD, заменив их специальным флагом доверенного соединения Trusted_Connection=Yes.

Рассмотрим пример правильного формирования строки подключения на языке 1С:


ConnectString = "Provider=SQLOLEDB;" + 
                "Data Source=" + ServerName +
                ";Initial Catalog=" + DSN +
                ";Trusted_Connection=Yes;";

В данном примере:

SQLOLEDB — провайдер OLE DB для MS SQL Server;

Data Source — имя или IP-адрес экземпляра сервера SQL;

Initial Catalog — наименование целевой базы данных;

Trusted_Connection=Yes — указание использовать текущие учетные данные Windows без явной передачи логина и пароля.

Правила адресации и обращения к таблицам MS SQL Server

Рассмотрим порядок обращения к объектам базы данных в SQL-запросах из 1С:

  1. Если база данных указана в соединении: при явно заданном параметре Initial Catalog в строке подключения в текстах запросов можно обращаться напрямую к имени таблицы или с указанием схемы (например, dbo.ИмяТаблицы).
  2. Полный четырехкомпонентный синтаксис: если требуется обратиться к другой базе или соседнему серверу, используется полная цепочка адресации вида ИмяСервера.ИмяБазы.ИмяСхемы.ИмяТаблицы.

Особенности применения и современные рекомендации

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

1. Контекст исполнения на сервере 1С: если код подключения через Trusted_Connection=Yes выполняется на стороне сервера 1С (в клиент-серверном режиме), обращение к MS SQL Server происходит от имени учетной записи операционной системы, под которой запущен сервис 1С (например, usr1cv8). Поэтому соответствующее имя входа должно быть создано на сервере SQL и обладать нужными правами доступа.

2. Выбор современного драйвера: провайдер SQLOLEDB является устаревшим. В новых проектах рекомендуется использовать более актуальные провайдеры и драйверы, такие как MSOLEDBSQL (Microsoft OLE DB Driver for SQL Server) или ODBC-драйверы (например, DRIVER={ODBC Driver 17 for SQL Server}).

3. Разрядность компонентов: используемый OLE DB провайдер или ODBC драйвер должен соответствовать разрядности процесса 1С (32-bit или 64-bit), в контексте которого выполняется код соединения.

4. Альтернатива без COM-объектов: начиная с версии платформы 8.2.14, для чтения и записи данных во внешних базами SQL рекомендуется задействовать штатный механизм платформы — Внешние источники данных. Это позволяет работать с таблицами SQL средствами встроенного языка и языка запросов 1С без ручного создания COM-объектов ADODB.Connection.

← На главную