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

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С: ITILIUM

Информационная безопасность Роли и права Пароли Платформа 1С v8.3 Управляемые формы Конфигурации 1cv8 Абонемент ($m)

Обработка "Менеджер авторизации пользователей" разработана для управления авторизацией пользователей в информационной базе на платформе 1С: ITILIUM. Этот инструмент предоставляет широкий набор функций, обеспечивающих безопасность доступа к данным и управление правами пользователей.

5 стартмани

17.04.2024    318    0    flappy27    0    

2

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

Удаленное управление Пароли Платформа 1С v8.3 1С:ERP Управление предприятием 2 Абонемент ($m)

Как дать доступ сотруднику к удаленному рабочему столу (RDP), но при этом не давать пароль доступа?

2 стартмани

25.03.2024    4252    5    dungeonkeeper    1    

12

Сохранение учетных данных от Webkassa, Розница для Казахстана, ред 2.3

Пароли Платформа 1С v8.3 1С:Розница 2 Розничная и сетевая торговля (FMCG) Казахстан Абонемент ($m)

Расширение позволяет сохранить данные о логине и пароле для сервиса Webkassa.kz и при каждом входе в РМК не вводить эти данные, что позволяет сократить время при входе в РМК для кассиров.

1 стартмани

12.12.2023    350    1    anuar_medeup    0    

0

Сохранение учетных данных для WebKassa для Казахстана

Пароли Платформа 1С v8.3 Конфигурации 1cv8 Казахстан Абонемент ($m)

Расширение для запоминания в базе логина пароля для авторизации на сервисе WebKassa.

1 стартмани

28.08.2023    640    2    BadMadJohn    0    

2

Массовая генерация и замена паролей пользователей

Пароли Платформа 1С v8.3 Конфигурации 1cv8 1С:Бухгалтерия 3.0 Абонемент ($m)

ДОБАВЛЕНА ГЕНЕРАЦИЯ ПАРОЛЯ! Запускаем обработку, смотрим на список пользователей и делаем свое дело, выделяем нужных или всех сразу и назначаем пароль. Особенно помогает, когда ну очень большая организация. ДОБАВЛЕНА ГЕНЕРАЦИЯ ПАРОЛЯ!

1 стартмани

28.08.2023    760    2    Maxiko    3    

4

Групповая генерация паролей для рассылки отчетов в ЗУП 3

Пароли Платформа 1С v8.3 1С:Зарплата и Управление Персоналом 3.x Россия Абонемент ($m)

Генерирует и устанавливает пароль разной сложности для каждого элемента из выбранной папки справочника Рассылка отчетов. Для генерируемого пароля есть выбор длины и сложности (цифры, большие и маленькие буквы, спецсимволы) . Есть опция установки в качестве пароля номера паспорта сотрудника. После обновления на ЗУП 3.1.27.23 обработка быстро создаст новые пароли взамен созданных до обновления на этот релиз (и после обновления - "исчезнувших"). Об изменениях в хранении паролей для справочника Рассылки отчетов с версии ЗУП 3.1.27.23. Описание и обход ошибки в функции общего модуля ПользователиСлужебный.СоздатьПароль(ПараметрыПароля()).

1 стартмани

10.08.2023    861    3    bugtester    0    

3

Скрипт для создания пользователей на сервере

Роли и права Пароли Абонемент ($m)

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

1 стартмани

30.05.2023    1895    4    user1093325    6    

6

Чтение / Запись данных в регистр "Безопасное хранилище данных"

Пароли Платформа 1С v8.3 Конфигурации 1cv8 Абонемент ($m)

Если в проекте 1С используется подсистема БСП, то хранение паролей можно организовать через безопасное хранилище.

1 стартмани

20.01.2023    3471    15    baidinden    1    

3
Оставьте свое сообщение