Нередко после обновления платформы 1С:Предприятие 8.3 системные администраторы и разработчики сталкиваются с аномальным поведением системы при входе пользователей. Типичная картина выглядит так: утром при старте рабочего дня ни один обычный пользователь не может войти в клиент-серверную базу, получая ошибку проверки логина и пароля. Однако после 10–15 упорных попыток вход неожиданно удается, либо система начинает беспрепятственно пускать всех пользователей сразу после того, как в базу хотя бы один раз зайдет пользователь с административными правами. Проанализируем, почему возникает такое поведение и как его исправить.
Основным триггером описанного сбоя является использование в конфигурации встроенного механизма разделения данных (не путать с ограничениями на уровне записей RLS). Разберем цепочку событий, приводящую к ошибке авторизации:
Разделение аутентификации установлено в значение Разделять, платформа допускает существование одинаковых имен пользователей в разных независимых областях. В этом случае при обычной авторизации без предварительно переданного контекста сервер не может определить, в какой именно области искать пользователя.rphost пуст. Первые запросы обычных пользователей завершаются ошибкой авторизации.Рассмотрим наиболее правильный способ устранения проблемы на уровне архитектуры конфигурации, если в вашей базе нет необходимости заводить пользователей с одинаковыми именами в разных отделах:
Разделение аутентификации и установим для него значение Не использовать. При этом основное свойство Разделение данных оставляем в значении Разделять.При такой настройке аутентификация логина и пароля всегда происходит по единой глобальной таблице пользователей информационной базы, а ограничение видимости данных по значению общего реквизита применяется платформой уже после успешного входа в сеанс.
Если разделение аутентификации является обязательным требованием системы, серверу необходимо заранее сообщить область данных, в которой зарегистрирован пользователь. Для этого модифицируем параметры подключения в списке информационных баз или ярлыках запуска:
/Z с указанием значения разделителя:
/Z "+000000001"
где вместо 000000001 указывается код или идентификатор соответствующего отдела.При использовании ключа /Z платформа подключается непосредственно к целевой области данных, устраняя неоднозначность поиска логина в холодном кэше сервера.
Проанализируем программный способ решения, когда при старте клиентского приложения не происходит своевременной установки системных переменных. В модуле сеанса необходимо обеспечить безусловную инициализацию ключевых параметров еще до выполнения основных процедур конфигурации:
Процедура УстановкаПараметровСеанса(ТребуемыеПараметры)
// Принудительно инициализируем контекст текущего пользователя
Если ТребуемыеПараметры = Неопределено Или ТребуемыеПараметры.Найти("ТекущийПользователь") <> Неопределено Тогда
ПараметрыСеанса.ТекущийПользователь = УправлениеПользователями.ПолучитьТекущегоПользователя();
КонецЕсли;
КонецПроцедуры
Корректное заполнение параметров в событии УстановкаПараметровСеанса гарантирует, что при обращении серверных процедур к значениям разделителей не возникнет неперехваченных исключений, которые платформа визуально транслирует пользователю как отказ в авторизации.
Если оперативно внести изменения в метаданные невозможно, применим административный обходной путь. Настроим утренний автоматический запуск сеанса под служебным пользователем-администратором до начала рабочего дня сотрудников:
"C:\Program Files\1cv8\8.3.9.1818\bin\1cv8c.exe" ENTERPRISE /S "Server1C\BaseName" /N "ServiceAdmin" /P "ComplexPassword" /C "AutoWarmUp"
ПриНачалеРаботыСистемы добавим проверку параметра запуска для автоматического закрытия прогревочной сессии:
Если ПараметрЗапуска = "AutoWarmUp" Тогда
ЗавершитьРаботуСистемы(Ложь);
КонецЕсли;
Такой сценарий обеспечивает заблаговременный запуск и прогрев процессов rphost, после чего обычные учетные записи авторизуются с первого раза.
Если ошибки аутентификации сопровождаются сбоями в работе пула соединений SQL Server (например, потерей временных таблиц #tt1, сбоями транзакций в Microsoft SQL Server Native Client или ошибками кэша метаданных), наиболее надежным решением остается откат на стабильную версию платформы. Для конфигураций, использовавших релизы 8.3.7, рекомендуется выполнить возврат на проверенную сборку 8.3.7.2027 либо запланировать переход на более поздние протестированные релизы платформы, где исправлены ошибки механизма разделения аутентификации.