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

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"), ТекстОшибки);

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

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

 

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

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

См. также

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

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

1 стартмани

09.04.2026    288    1    Vladislav39609    0    

4

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

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

1 стартмани

11.03.2026    381    4    HIgor    0    

0

Пароли Перенос данных 1C Системный администратор Программист 1С 8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

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

2 стартмани

04.02.2026    996    8    InFlach    17    

8

Пароли Администрирование веб-серверов Системный администратор Программист Россия Абонемент ($m)

Для запуска базы, опубликованной на вебсервере через тонкий клиент (win/linux) с доменной авторизацией. Подходит для запуска тонкого клиента (база web публикация) с устройств не в домене, например для работы внешних пользователей.

1 стартмани

03.01.2026    3616    1    shooshpanius    0    

7

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

Данная внешняя обработка для платформы 1С предназначена для анализа и проверки стойкости паролей пользователей информационной базы. Она выполняет поиск паролей методом перебора (brute-force) по их хранящемуся в системе хешу (1-2 минуты для выборки в 200 пользователей с установленными паролями). 

1 стартмани

27.11.2025    1312    9    InFlach    0    

3

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

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

1 стартмани

13.11.2025    1401    1    space300    11    

0

Пароли Инструменты администратора БД Пользователь 1С:Предприятие 8 1С:Бухгалтерия 3.0 Россия Абонемент ($m)

В базах 1С у множества пользователей не установлен пароль для входа, так как в общих настройках не задана минимальная длина пароля для всех юзеров. Что делать?

1 стартмани

16.10.2025    1317    3    cska1312    0    

1

Роли и права Пароли Инструменты администратора БД Системный администратор Программист 1С:Предприятие 8 1С:ERP Управление предприятием 2 1С:Бухгалтерия 3.0 1С:Управление торговлей 11 1С:Зарплата и Управление Персоналом 3.x Абонемент ($m)

Дополнительная обработка для работы с пользователями БСП и ИБ. Ключевые возможности: - Быстрый просмотр пользователей и главных свойств - Запуск приложения под любым пользователям базы данных - Поиск и исправления узких мест в безопасности - Групповое редактирование пользователей - Быстрое копирование прав доступа и групп от пользователя к пользователю Подходит для любой конфигурации с БСП на управляемых формах для клиент-серверных баз и файловых.

1 стартмани

07.07.2025    4765    66    FFX_Eka    7    

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