Как исправить ошибку прав доступа и настроить параметры соединения с внешними источниками данных в 1С

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

При интеграции 1С со сторонними СУБД (например, MySQL, PostgreSQL или MS SQL) через механизм Внешние источники данных разработчики часто сталкиваются с ситуацией, когда метод УстановитьОбщиеПараметрыСоединения() возвращает ошибку о недостаточности прав, если у пользователя не установлена роль «Администрирование». При этом попытка обойти ограничение через УстановитьПривилегированныйРежим(Истина) в клиент-серверном варианте либо не дает эффекта, либо приводит к ошибке диспетчера ODBC SQLSTATE: IM002. Разберем по шагам, почему возникают эти проблемы и как правильно организовать подключение к внешнему источнику данных.

Причины ошибки прав доступа при вызове УстановитьОбщиеПараметрыСоединения

Проанализируем механику работы платформы 1С:Предприятие с параметрами внешних источников:

  1. Глобальный характер настроек: Метод УстановитьОбщиеПараметрыСоединения() сохраняет параметры подключения на уровне всей информационной базы для всех пользователей. По этой причине платформа на системном уровне требует наличия административных прав. Обычным пользователям для чтения и изменения таблиц внешнего источника достаточно стандартных прав на сам объект внешнего источника данных и входящие в него таблицы.
  2. Ограничения безопасного режима во внешних обработках: Если программный код запускается из внешней обработки или отчета, платформа автоматически включает БезопасныйРежим = Истина. В безопасном режиме вызов метода УстановитьПривилегированныйРежим(Истина) игнорируется, и привилегии не повышаются.

Способ 1. Использование привилегированного общего модуля на сервере

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

Посмотрим на пример реализации серверной функции в привилегированном общем модуле:


Функция УстановитьПараметрыИПодключиться(ПараметрыПодключения, ТекстОшибки) Экспорт

    УстановитьПривилегированныйРежим(Истина);
    
    ПараметрыСоединения = ВнешниеИсточникиДанных.Opencart.ПолучитьОбщиеПараметрыСоединения();
    ПараметрыСоединения.АутентификацияСтандартная = Истина;
    ПараметрыСоединения.ИмяПользователя = ПараметрыПодключения.ИмяПользователя;
    ПараметрыСоединения.Пароль = ПараметрыПодключения.Пароль;
    ПараметрыСоединения.СУБД = "MySQL";
    
    // Формируем строку подключения без лишних пробелов и переносов строк
    ПараметрыСоединения.СтрокаСоединения = СтрШаблон(
        "DRIVER={MySQL ODBC 8.0 Unicode Driver};SERVER=%1;DATABASE=%2;PORT=%3;",
        ПараметрыПодключения.Сервер,
        ПараметрыПодключения.БазаДанных,
        ПараметрыПодключения.Порт
    );
    
    Попытка
        ВнешниеИсточникиДанных.Opencart.УстановитьОбщиеПараметрыСоединения(ПараметрыСоединения);
        ВнешниеИсточникиДанных.Opencart.УстановитьСоединение();
        Возврат Истина;
    Исключение
        ТекстОшибки = ОписаниеОшибки();
        Возврат Ложь;
    КонецПопытки;

КонецФункции

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

Способ 2. Интерактивная разовая настройка подключения

В большинстве сценариев нет необходимости каждый раз программно вызывать УстановитьОбщиеПараметрыСоединения(). Достаточно один раз настроить подключение под учетной записью администратора:

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

Устранение ошибки ODBC IM002 в клиент-серверном режиме

После выноса кода на сервер часто возникает ошибка: [Microsoft][Диспетчер драйверов ODBC] Источник данных не найден и не указан драйвер, используемый по умолчанию (SQLSTATE: IM002). Разберем основные причины ее возникновения в SQL-версии 1С:

  1. Несоответствие разрядности (битности) драйвера: На сервере 1С код исполняется процессом rphost. Если сервер 1С:Предприятие 64-битный, на сервере операционной системы обязательно должен быть установлен 64-битный драйвер ODBC. 32-битный драйвер серверный процесс 1С не увидит.
  2. Неточное наименование драйвера: В параметре DRIVER={...} строки соединения имя должно в точности совпадать с именем драйвера в системном диспетчере ODBC (odbcad32.exe). Например, вместо абстрактного DRIVER={MySQL ODBC 5.1 Driver} необходимо указывать точное системное имя, такое как DRIVER={MySQL ODBC 8.0 Unicode Driver} или DRIVER={MySQL ODBC 5.1 Unicode Driver}.
  3. Переносы строк в многострочных литералах: При формировании строки соединения с использованием вертикальной черты | 1С добавляет невидимые символы перевода строки и пробелы, которые ломают разбор строки диспетчером ODBC. Рекомендуется склеивать строку в одну линию или использовать функцию СтрШаблон().
  4. Настройка системного DSN вместо пользовательского: Если в строке подключения используется DSN, он должен быть создан на вкладке Системный DSN (System DSN), так как служба сервера 1С работает под отдельной учетной записью (например, USR1CV8) и не имеет доступа к пользовательским DSN конкретного администратора Windows.
← На главную