Ошибка аутентификации клиента средствами операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе

26.10.23

Администрирование - Пароли

Устранение ошибки "Ошибка аутентификации клиента средствами операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе", при вызове метода "УстановитьСоединенение()".

Проблема: При установке соединения с внешним источником, возникает ошибка: "Ошибка аутентификации клиента средствами операционной системы: Аутентификационный контекст клиента отсутствует в рабочем процессе".

Решение: 

1. Если требуется выполнить аутентификацию от имени пользователя операционной системы (доменная авторизация):

Внимание! Важно учитывать, на какой стороне выполняете подключение к внешнему источнику, а именно, если выполняется соединение на стороне "Толстого клиента", пользователем для авторизации на внешнем источнике будет выступать "пользователь Windows" от имени которого был запущен клиент. Если подключение будет выполняться "На сервере", пользователем для авторизации будет выступать "пользователь - Windows" от имени которого выполняется служба кластера 1С.

 

СУБД = "MSSQLServer"; // Внешний источник MS SQL
ИмяСервераСУБД = "computer"; // Имя компьютера в локальной сети
ИмяБазыДанныхНаСУБД = "sample"; // Имя базы данных на сервере MS SQL

// Описание параметров подключения
Соединение = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
Соединение.СУБД = ПараметрыСоединения.СУБД;
Соединение.АутентификацияОС = Неопределено; // Включаем доменную авторизацию. Важно! Установка в значение "Истина", приведёт к вышеназванной ошибке
Соединение.СтрокаСоединения = СтрШаблон("Driver={SQL Server};Server=%1;Database=%2", ИмяСервераСУБД, ИмяБазыДанныхНаСУБД);

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

// Выполняем авторизацию
ВнешнийИсточник.УстановитьСоединение();

 

2. Если для авторизации на внешнем источнике необходимо использовать логин и пароль:

 

СУБД = "MSSQLServer"; // Внешний источник MS SQL
ИмяСервераСУБД = "computer"; // Имя компьютера в локальной сети
ИмяБазыДанныхНаСУБД = "sample"; // Имя базы данных на сервере MS SQL
ИмяПользователяНаСУБД = "sa";
ПарольПользователяНаСУБД = "qwerty";

// Описание параметров подключения
Соединение = Новый ПараметрыСоединенияВнешнегоИсточникаДанных;
Соединение.СУБД = ПараметрыСоединения.СУБД;
Соединение.АутентификацияОС = Ложь; // Отключаем доменную авторизацию
Соединение.ИмяПользователя = ИмяПользователяНаСУБД;
Соединение.Пароль = ПарольПользователяНаСУБД;
Соединение.СтрокаСоединения = СтрШаблон("Driver={SQL Server};Server=%1;Database=%2", ИмяСервераСУБД, ИмяБазыДанныхНаСУБД);

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

// Выполняем авторизацию
ВнешнийИсточник.УстановитьСоединение();

 

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

1. Всегда выполняю подключение к внешнему источнику только "на сервере".

2. Запрос данных из внешнего источника выполняю в "фоновом задании", для того что - бы устранить "бесконечное" ожидание данных из внешнего источника в случае внештатной ситуации, а так же "динамически" менять допустимое время на получение данных от внешнего источника для разных запросов.

3. Использую одну функцию через которую выполняются все запросы к внешним источникам.

Пример:

1. Текст общего модуля "ВнешнийИсточник" (Сервер):

 

////////////////////////////////////////////////////////////////////////////////
// Механизмы чтения данных из внешних источниках
// Выполняется только на сервере.
//
////////////////////////////////////////////////////////////////////////////////
#Область ПрограммныйИнтерфейс

// Чтение данных из внешнего источника
//
// Параметры:
//  ВнешнийИсточник  - ВнешниеИсточникиДанныхМенеджер - Внешний источник для которого выполняется подключение
//  ТекстЗапроса     - Строка - Текст запроса к внешнему источнику
//  ПараметрыЗапроса - Структура - Параметры запроса: "Ключ" - имя параметра, "Значение" - значение параметра
//  ТекстОшибки      - Строка - В значение переменной будет передан текст ошибки
//  Таймаут          - Число - Максимально разрешенное время на выполнение запроса (по умолчанию 60 секунд)
//
// Возвращаемое значение:
//  Неопределено, РезультатЗапроса - Результат выборки внешнего источника
//
Функция ПрочитатьДанные(ВнешнийИсточник, ТекстЗапроса, ПараметрыЗапроса, ТекстОшибки, Таймаут = 60) Экспорт
	
	АдресХранилища = ПоместитьВоВременноеХранилище(Неопределено, Новый УникальныйИдентификатор);
	ПараметрыФоновогоЗадания = Новый Массив;
	ПараметрыФоновогоЗадания.Добавить(ВнешнийИсточник);
	ПараметрыФоновогоЗадания.Добавить(ТекстЗапроса);
	ПараметрыФоновогоЗадания.Добавить(ПараметрыЗапроса);
	ПараметрыФоновогоЗадания.Добавить(АдресХранилища);
	
	ФоновоеЧтениеДанных = ФоновыеЗадания.Выполнить("АР_ВнешниеИсточникиСервер.ФоновоеЧтениеДанных", ПараметрыФоновогоЗадания, , "Чтение данных из внешнего источника");
	ФоновоеЧтениеДанных.ОжидатьЗавершенияВыполнения(Таймаут);
	ФоновоеЧтениеДанных = ФоновыеЗадания.НайтиПоУникальномуИдентификатору(ФоновоеЧтениеДанных.УникальныйИдентификатор);
	Если ФоновоеЧтениеДанных.Состояние = ПредопределенноеЗначение("СостояниеФоновогоЗадания.Активно") Тогда
		
		ФоновоеЧтениеДанных.Отменить();
		
		ТекстОшибки = "Превышен интервал ожидания чтения данных из внешнего источника";
		ЗаписьЖурналаРегистрации("ВнешниеИсточники.Таймаут", УровеньЖурналаРегистрации.Предупреждение, , , ТекстОшибки);
		
		Возврат Неопределено;
		
	КонецЕсли;
	
	РезультатЧтения = ПолучитьИзВременногоХранилища(АдресХранилища);
	УдалитьИзВременногоХранилища(АдресХранилища);
	
	Если РезультатЧтения = Неопределено Тогда
		
		ИнформацияОбОшибке = ФоновоеЧтениеДанных.ИнформацияОбОшибке;
		ТекстОшибки = ?(ИнформацияОбОшибке = Неопределено, "",
			ОбработкаОшибок.КраткоеПредставлениеОшибки(ФоновоеЧтениеДанных.ИнформацияОбОшибке));
		
		ТекстОшибки = СтрШаблон(
			"Не удалось выполнить чтение данных ""%1""",
			?(ПустаяСтрока(ТекстОшибки), "Не удалось получить результат выполнения операции, выполните перезапуск программы 1С:Предприятие", ТекстОшибки));
		
		Возврат Неопределено;
		
	КонецЕсли;
	
	ТекстОшибки = РезультатЧтения.ТекстОшибки;
	
	Возврат РезультатЧтения.Результат;
	
КонецФункции // ПрочитатьДанные()

#КонецОбласти

#Область СлужебныйПрограммныйИнтерфейс

// Системная процедура для чтения данных в фоновом задании (используйте функцию "ПрочитатьДанные")
//
// Параметры:
//  ВнешнийИсточник  - ВнешниеИсточникиДанныхМенеджер - Внешний источник для которого выполняется подключение
//  ТекстЗапроса     - Строка - Текст запроса к внешнему источнику
//  ПараметрыЗапроса - Структура - Параметры запроса: "Ключ" - имя параметра, "Значение" - значение параметра
//  Автоцентр        - СправочникСсылка.Автоцентры - Автоцентр по которому будет определен SQL - сервер для подключения
//  АдресХранилища   - Строка - Адрес во временном хранилище куда будет помещен результат выполнения
//
Процедура ФоновоеЧтениеДанных(ВнешнийИсточник, ТекстЗапроса, ПараметрыЗапроса, АдресХранилища) Экспорт
	
	СтруктураПараметровВозврата = Новый Структура("Результат, ТекстОшибки", Неопределено, "");
	Если УстановитьСоединение(ВнешнийИсточник, СтруктураПараметровВозврата.ТекстОшибки) Тогда
		
		Запрос = Новый Запрос(ТекстЗапроса);
		Если НЕ ПараметрыЗапроса = Неопределено Тогда
		
			Для Каждого Параметр Из ПараметрыЗапроса Цикл
				
				Запрос.УстановитьПараметр(Параметр.Ключ, Параметр.Значение);
				
			КонецЦикла;
		
		КонецЕсли;
		
		// Чтение в попытке на случай если запрос некорректный
		Попытка
			
			УстановитьПривилегированныйРежим(Истина);
				
				СтруктураПараметровВозврата.Результат = Запрос.Выполнить();
				
			УстановитьПривилегированныйРежим(Ложь);
			
		Исключение
			
			СтруктураПараметровВозврата.ТекстОшибки = СтрШаблон("Не удалось выполнить чтение данных ""%1""",
				ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
			
		КонецПопытки;
		
		УстановитьПривилегированныйРежим(Истина);
			
			ВнешнийИсточник.РазорватьСоединение();
			
		УстановитьПривилегированныйРежим(Ложь);
		
	КонецЕсли;
	
	ПоместитьВоВременноеХранилище(СтруктураПараметровВозврата, АдресХранилища);
	
КонецПроцедуры // ФоновоеЧтениеДанных()

#КонецОбласти

#Область СлужебныеПроцедурыИФункции

// Подключение к базе данных внешнего источника
//
// Параметры:
//  ВнешнийИсточник - ВнешниеИсточникиДанныхМенеджер - Внешний источник для которого выполняется подключение
//  ТекстОшибки     - Строка - В значение переменной будет передан текст ошибки
//
// Возвращаемое значение:
//  Булево - Результат подключения
//
Функция УстановитьСоединение(ВнешнийИсточник, ТекстОшибки)
	
	ПараметрыСоединения = ПолучитьПараметры(ВнешнийИсточник);
	Если ПараметрыСоединения = Неопределено ИЛИ ПустаяСтрока(ПараметрыСоединения.БазаДанных) Тогда
		
		ТекстОшибки = СтрШаблон("Не установлены параметры соединения с сервером внешних источников ""Параметры обмена данными""");
		Возврат Ложь;
		
	КонецЕсли;
	
	// Описание параметров подключения
	Соединение = Новый ПараметрыСоединенияВнешнегоИсточникаДанных; //@skip-check type-not-used-in-operator-new
	Соединение.СУБД = ПараметрыСоединения.СУБД;
	Соединение.СтрокаСоединения = СтрШаблон("Driver={SQL Server};Server=%1;Database=%2",
		ПараметрыСоединения.СерверБазДанных, ПараметрыСоединения.БазаДанных);
	
	// Переданы параметры подключения
	Если НЕ ПустаяСтрока(ПараметрыСоединения.Логин) Тогда
		
		Соединение.АутентификацияОС = Ложь;
		Соединение.ИмяПользователя = ПараметрыСоединения.Логин;
		Соединение.Пароль = ПараметрыСоединения.Пароль;
		
	КонецЕсли;
	
	УстановитьПривилегированныйРежим(Истина);
		
		ВнешнийИсточник.УстановитьОбщиеПараметрыСоединения(Соединение);
		ВнешнийИсточник.УстановитьПараметрыСоединенияПользователя(ИмяПользователя(), Соединение);
		ВнешнийИсточник.УстановитьПараметрыСоединенияСеанса(Соединение);
		
	УстановитьПривилегированныйРежим(Ложь);
	
	// Нет связи с сервером SQL или неверный логин и пароль
	Попытка
		
		УстановитьПривилегированныйРежим(Истина);
			
			ВнешнийИсточник.УстановитьСоединение();
			
		УстановитьПривилегированныйРежим(Ложь);
		
	Исключение
		
		ТекстОшибки = СтрШаблон(
			"Не удалось установить соединение с внешним источником, сервер ""%1"", база данных ""%2"", по причине ""%3""",
			ПараметрыСоединения.СерверБазДанных, ПараметрыСоединения.БазаДанных,
			ОбработкаОшибок.КраткоеПредставлениеОшибки(ИнформацияОбОшибке()));
		
		Возврат Ложь;
		
	КонецПопытки;
	
	Возврат Истина;
	
КонецФункции // УстановитьСоединение()

// Параметры подключения к внешнему источнику
//
// Параметры:
//  ВнешнийИсточник - ВнешниеИсточникиДанныхМенеджер - Внешний источник для которого выполняется подключение
//
// Возвращаемое значение:
//  Структура - Параметры авторизации.
//    Описание структуры параметров:
//    * СУБД            - Строка - Допустимый тип внешнего источника.
//    * СерверБазДанных - Строка - Имя компьютера в локальной сети.
//    * БазаДанных      - Строка - Имя базы данных на сервере.
//    * Логин           - Строка - Имя пользователя на внешнем источнике (если не указано - выполняется доменная авторизация).
//    * Пароль          - Строка - Пароль пользователя на внешнем источнике.
// 
Функция ПолучитьПараметры(ВнешнийИсточник)
	
	ПараметрыСоединения = Новый Структура;
	ПараметрыСоединения.Вставить("СУБД", "MSSQLServer");
	ПараметрыСоединения.Вставить("Логин", "");
	ПараметрыСоединения.Вставить("Пароль", "");	

	Если ВнешнийИсточник = ВнешниеИсточникиДанных.ПоУмолчанию Тогда

		ПараметрыСоединения.СерверБазДанных = "sql";
		ПараметрыСоединения.БазаДанных = "default";

	КонецЕсли;

	Возврат ПараметрыСоединения; 

КонецФункции // ПолучитьПараметры()

#КонецОбласти

 

2. Пример выполнения запроса к внешнему источнику:

 

ТекстЗапроса =
"ВЫБРАТЬ
|	ADExplorer.НаименованиеПолное КАК НаименованиеПолное,
|	ADExplorer.АдресЭлектроннойПочты КАК АдресЭлектроннойПочты
|ИЗ
|	ВнешнийИсточникДанных.ПоУмолчанию.Таблица.ADExplorer КАК ADExplorer
|ГДЕ
|	ADExplorer.ИмяПользователя = &ИмяПользователя";

ТекстОшибки = "";
Результат = ВнешнийИсточник.ПрочитатьДанные(ВнешниеИсточникиДанных.ПоУмолчанию, ТекстЗапроса,
	Новый Структура("ИмяПользователя", "admin"), ТекстОшибки);

Если НЕ ПустаяСтрока(ТекстОшибки) Тогда
	
	ЗаписьЖурналаРегистрации("АвтоматическоеСозданиеУчетныхЗаписей", УровеньЖурналаРегистрации.Ошибка, , ,
		ТекстОшибки);
	
	Возврат;
	
КонецЕсли;

ВыборкаИзРезультатаЗапроса = Результат.Выбрать();
ВыборкаИзРезультатаЗапроса.Следующий();

 

Вступайте в нашу телеграмм-группу Инфостарт

ВнешниеИсточникиДанных ВнешнийИсточникиДанных Аутентификационный Ошибка

Вы можете заказать платную адаптацию этой статьи под ваши задачи на «Бирже заказов».

  • 0% комиссии — оплата напрямую исполнителю;
  • Исполнители любого масштаба — от отдельных специалистов до команд под проект;
  • Прямой обмен контактами между заказчиком и исполнителем;
  • Безопасная сделка — при необходимости;
  • Рейтинги, кейсы и прозрачная система откликов.

См. также

Пароли Программист Пользователь 1С 8.3 Россия Абонемент ($m)

Расширение для конфигураций 1С для хранения паролей.  Админ / разработчик / пользователь меняют пароли в базах, а потом успешно их забывают, или кто-то из сторонних разработчиков или коллег поменял пароль, а вас не известил или не положил в какую-нибудь базу знаний, особенно головная боль, если таких баз много или под одной учеткой работают сразу много сотрудников. Расширение решает эту задачу: оно ведёт актуальный реестр учётных данных пользователей вне базы - в Google Таблице и/или в файле Excel. Реестр обновляется сам, в момент смены пароля или логина, без участия администратора. Будет полезно администраторам, которые сами выдают и меняют пароли пользователям; специалистам франчей и ИТ-отделам, обслуживающим несколько баз. Небольшим компаниям, где нет корпоративного менеджера паролей, но нужен контролируемый доступ к учётным данным.

1 стартмани

31.08.2026    136    1    Otlichnik90    0    

1

Пароли Системный администратор 1С 8.3 Бесплатно (free)

Реальная история: собственник за день распустил весь ИТ-отдел, пароля от SQL не осталось. Разбираю, где 1С хранит пароль СУБД (1CV8Clst.lst), почему он извлекается, кто до него дотянется — и как закрыть дыру. Плюс обработка, которая проверит ваш кластер за минуту.

06.08.2026    2069    nedomolkov.ivan    24    

9

Администрирование СУБД Пароли Системный администратор 1С 8.3 1С:Розница 2 1С:Управление производственным предприятием Абонемент ($m)

Пароль пользователя СУБД лежит в 1CV8Clst.lst обратимо: кто читает папку srvinfo - достаёт пароли SQL всех баз кластера, минуя права 1С. Обработка показывает, у каких баз пароль извлекается, помечает слабые и выдаёт план защиты. К СУБД не подключается, ничего не пишет - только читает файл.

10 стартмани

06.08.2026    1018    14    nedomolkov.ivan    0    

7

Пароли Программист 1С:Предприятие 8 Россия Абонемент ($m)

Как можно перенести пароли пользователей из одной базы в другую. Как установить нужный пароль списку пользователей.

1 стартмани

04.05.2026    731    3    DenShilyaev    0    

3

Пароли Программист 1С 8.3 1С:Бухгалтерия 3.0 1С:Управление нашей фирмой 3.0 Абонемент ($m)

Представляю обработку для изменения политики паролей для одного или нескольких пользователей с использованием встроенного в платформу функционала по управление политикой паролей из встроенного языка.

1 стартмани

09.04.2026    1218    4    Vladislav39609    3    

5

Пароли Программист 1С 8.3 Абонемент ($m)

Получение списка пользователей без пароля. Управляемые и не управляемые формы. Любые конфигурации.

1 стартмани

11.03.2026    933    10    HIgor    0    

0

Пароли Перенос данных 1C Системный администратор Программист 1С 8.3 Абонемент ($m)

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

2 стартмани

04.02.2026    1616    12    InFlach    17    

8
Для отправки сообщения требуется регистрация/авторизация