При переносе или повторном подключении информационной базы между серверами и кластерами 1С администраторы могут столкнуться с нестандартным сбоем: список пользователей информационной базы оказывается практически пустым (остается одна учетная запись), а любая попытка добавить нового пользователя через Конфигуратор или режим предприятия приводит к тому, что сохраняется только последний созданный пользователь, перезаписывая предыдущего. Разберем архитектурные причины возникновения такой ситуации и рассмотрим пошаговые способы восстановления нормальной работы списка пользователей.
Платформа 1С:Предприятие 8.3 использует комбинированную схему хранения учетных записей на уровне СУБД:
v8users — содержит отдельные строки для каждого пользователя с их идентификаторами UUID, именами, настройками и хэшами паролей.users.usr, упакованный в виде BLOB-данных в служебной таблице Params (или PARAMS).Проанализируем механику сбоя: если информационная база отключается от кластера некорректно (например, когда базу в СУБД переводят в состояние OFFLINE при активных сеансах и кэше процессов rphost / rmngr), нарушается синхронизация между физическими таблицами и серверным кэшем srvinfo. При первом входе платформа видит поврежденный слепок пользователей. В момент добавления новой учетной записи платформа целиком перезаписывает файл users.usr в таблице Params на основе текущего пустого состояния, затирая все прежние записи в v8users.
Самое быстрое и действенное решение при возникновении серверного кэш-глюка — удалить регистрацию базы из кластера 1С и добавить её заново. Разберем правильный порядок действий:
Если простая перерегистрация не помогла, причиной может являться поврежденный кэш сеансовых контекстов в каталоге данных кластера. Выполним полную очистку кэша сервера:
1C:Enterprise 8.3 Server Agent или ragent).C:\Program Files\1cv8\srvinfo или /home/usr1cv8/.1cv8/1C/1cv8/ в Linux).snccntx*, а также кэш внутри папки соответствующего кластера (каталог с GUID базы) и очищаем их.Если в результате перезаписи бинарного контейнера записи пользователей были физически стерты из v8users, восстановим только метаданные пользователей из свежего SQL-дампа без необходимости полного разворачивания всей базы данных. Разберем пример SQL-запроса для Microsoft SQL Server:
-- Очищаем поврежденную таблицу пользователей в рабочей базе
DELETE FROM [РабочаяБаза].[dbo].[v8users];
-- Копируем записи пользователей из резервной копии
INSERT INTO [РабочаяБаза].[dbo].[v8users]
SELECT * FROM [КопияБазы].[dbo].[v8users];
-- Синхронизируем бинарный контейнер users.usr в таблице Params
UPDATE [РабочаяБаза].[dbo].[Params]
SET [BinaryData] = (
SELECT [BinaryData]
FROM [КопияБазы].[dbo].[Params]
WHERE [FileName] = 'users.usr'
)
WHERE [FileName] = 'users.usr';
После выполнения запроса перезапускаем рабочий процесс кластера 1С и проверяем доступ под учетными записями.
Если резервной копии нет, а конфигуратор заблокирован и сохраняет только одного пользователя, можно выполнить принудительный сброс поврежденной структуры пользователей:
DELETE FROM [РабочаяБаза].[dbo].[Params] WHERE [FileName] = 'users.usr';
v8users:
DELETE FROM [РабочаяБаза].[dbo].[v8users];
users.usr, и последующие пользователи будут сохраняться в штатном режиме.Администрирование -> Настройки пользователей и прав привязываем учетную запись к соответствующему элементу Справочник.Пользователи.Чтобы избежать подобных сбоев в будущем, сисадминам и программистам следует строго соблюдать последовательность отключения базы:
OFFLINE принудительно, пока служба сервера 1С удерживает активные соединения с сервером баз данных.