Каждый системный администратор или специалист 1С рано или поздно сталкивается с ситуацией, когда конкретный пользователь не может зайти в базу под своей учетной записью. При попытке авторизации система выдает лаконичное, но крайне неприятное сообщение: «Идентификация пользователя не выполнена». При этом проблема локализована конкретным сотрудником — все остальные пользователи заходят в базу без проблем, а очистка локального кэша на компьютерах и попытки сбросить пароль через пользовательский интерфейс не приносят никакого результата.
В этой статье мы подробно разберем, почему возникает эта ошибка в конфигурациях на базе Библиотеки стандартных подсистем (БСП), таких как 1С:Комплексная автоматизация 2, 1С:ERP или 1С:Управление торговлей 11, проанализируем техническую суть проблемы и рассмотрим эффективные практические способы ее решения.
Для того чтобы понять, почему ломается механизм авторизации, нам необходимо рассмотреть устройство подсистемы управления пользователями в современных конфигурациях 1С. В отличие от старых версий платформы, где все пользователи управлялись исключительно через Конфигуратор, современные решения используют двухплатформенный метод хранения данных.
Первый уровень — это уровень платформы 1С:Предприятие. Информация о пользователях хранится в специальной системной таблице базы данных под названием v8users. Именно здесь хранятся имя входа, имя пользователя, признак активности и SHA-1 хеш пароля. Объект платформы, отвечающий за эти данные, называется ПользовательИнформационнойБазы.
Второй уровень — это уровень прикладного решения БСП. В режиме «1С:Предприятие» существует справочник Пользователи. Он необходим для ведения аналитики в документах, настройки прав доступа, интерфейсов и фиксации истории работы. Каждому элементу этого справочника сопоставлен пользователь платформы через уникальный идентификатор GUID, который записывается в реквизит ИдентификаторПользователяИБ.
Помимо этого, БСП реализует собственные механизмы безопасности, такие как контроль сложности паролей, проверка периодичности смены паролей и хранение истории ранее использованных паролей. Для корректной работы этих проверок БСП вычисляет и сохраняет собственную контрольную сумму (хеш) пароля в скрытых реквизитах справочника или связанных регистрах сведений.
Рассогласование (десинхронизация) этих двух уровней и приводит к ошибке идентификации. Рассмотрим наиболее частые сценарии, когда это происходит:
v8users. Однако прикладной код БСП об этом изменении ничего не знает. В результате при попытке смены пароля в пользовательском режиме система просит ввести текущий пароль. Пользователь вводит верный пароль, установленный в Конфигураторе, но БСП сверяет его со своей устаревшей контрольной суммой и выдает ошибку несоответствия.rphost, транзакция прерывается. Связь между GUID платформенного пользователя и UUID элемента справочника нарушается.Ниже мы рассмотрим подробные пошаговые методы исправления этой проблемы.
Проанализируем простейший способ вернуть пользователю доступ в базу, который помог автору темы на форуме. Этот вариант подходит, если пользователю нужно срочно войти в программу, а разбираться с тонкими настройками БСП прямо сейчас нет времени.
В современных релизах конфигураций 1С:Комплексная автоматизация 2 встроен специальный штатный инструмент, позволяющий проверить и восстановить целостность связей между пользователями платформы и элементами справочника. Рассмотрим, как им воспользоваться.
Если сопоставление не помогло или вы хотите гарантированно очистить все зависшие контрольные суммы пароля в БСП, выполним процедуру полного пересоздания связей через административный интерфейс.
v8users.Этот простой цикл полностью пересоздает запись пользователя в платформе «с нуля» на основе актуальных данных из справочника БСП, стирая все ошибочные контрольные суммы и кэшированные данные авторизации.
Если у вас крупная компания и подобные проблемы возникают регулярно у разных сотрудников, мы можем написать простую обработку, которая поможет быстро выявить всех пользователей с нарушенными связями. Посмотрим на пример кода, который решает эту задачу:
Выборка = Справочники.Пользователи.Выбрать();
Пока Выборка.Следующий() Цикл
// Пропускаем группы пользователей
Если Выборка.ЭтоГруппа Тогда
Продолжить;
КонецЕсли;
// Пытаемся найти платформенного пользователя по записанному UUID
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоУникальномуИдентификатору(Выборка.ИдентификаторПользователяИБ);
Если ПользовательИБ = Неопределено И ЗначениеЗаполнено(Выборка.ИдентификаторПользователяИБ) Тогда
Сообщить("Внимание! Обнаружена битая связь для пользователя: " + Выборка.Наименование);
КонецЕсли;
КонецЦикла;
Этот код обходит справочник Пользователи и сверяет записанный в базе идентификатор с реальными пользователями платформы. Если метод НайтиПоУникальномуИдентификатору возвращает значение Неопределено, это сигнализирует о том, что связь нарушена, и пользователя необходимо сопоставить заново методами, описанными выше.
Поскольку рассматриваемая база работает в клиент-серверном режиме, платформа активно кэширует параметры авторизации и активные сессии на стороне сервера приложений (в рабочих процессах rphost). Иногда, даже после успешного исправления связей в базе данных, сервер продолжает хранить старый токен авторизации и отклоняет новые учетные данные пользователя.
Для решения этой проблемы выполним следующие действия:
1C:Enterprise 8.3 Server Agent (на операционной системе Windows это служба 1C:Enterprise 8.3 Server Agent, на Linux — демон srv1cv83). Это действие полностью очистит оперативную память рабочих процессов и заставит сервер перечитать таблицу пользователей заново при следующей попытке входа.Если сбои авторизации у пользователей вашей базы данных происходят систематически без видимых на то причин, это может свидетельствовать о частичном повреждении физических таблиц СУБД (например, индексов системной таблицы v8users). В этой ситуации рекомендуется выполнить тестирование и исправление базы данных.
Мы подробно проанализировали проблему сбоя идентификации пользователей в 1С:Комплексная автоматизация 2. Понимание двухуровневой структуры хранения учетных записей позволяет быстро локализовать неисправность и восстановить работоспособность системы без потери персональных настроек пользователей.