При администрировании информационных баз на платформе 1С:Предприятие 8.3 (в частности, в конфигурации «Бухгалтерия предприятия 3.0» и других решениях на базе Библиотеки стандартных подсистем) специалисты нередко сталкиваются с ситуацией, когда доступ к базе оказывается заблокирован. Попытка завести нового администратора или отредактировать существующего в режиме «1С:Предприятие» завершается исключением в модуле ПользователиСлужебный со следующим текстом:
«При записи пользователя информационной базы произошла ошибка: После исполнения в списке не осталось бы ни одного пользователя с административными правами, допускающего аутентификацию средствами 1С:Предприятия!»
Проанализируем архитектурные причины возникновения этой ошибки и разберем пошаговые методы восстановления корректного доступа к информационной базе.
Для понимания корня проблемы разберем, как устроен механизм авторизации в современных конфигурациях 1С. В типовых конфигурациях действует двухуровневая модель управления доступом:
v8users). Именно эти записи платформа проверяет в окне авторизации при старте сеанса.Пользователи: предназначен для ведения учетных записей внутри базы данных. Элемент справочника связывается с системным пользователем платформы через реквизит ИдентификаторПользователяИБ типа УникальныйИдентификатор.Права доступа в прикладных решениях управляются через справочники «Группы доступа» и «Профили групп доступа». При записи пользователя БСП выполняет строгий контроль целостности. Платформа и программные обработчики модуля ПользователиСлужебный запрещают сохранение настроек, если в системе не остается хотя бы одного активного администратора с включенной аутентификацией. Если признак входа отключен, система расценивает такого пользователя как заблокированного и выбрасывает исключение.
Выясним причину, почему возникает блокирующее исключение при попытке создания администратора. Чаще всего при создании или редактировании учетной записи в пользовательском режиме упускается ключевой флаг в карточке пользователя.
Разберем по шагам, как устранить ошибку штатным способом:
ПередЗаписью.Рассмотрим подробнее сценарий, когда администратор пытается настроить роли напрямую через Конфигуратор (меню «Администрирование» — «Пользователи»). Это типичная ошибка при работе с БСП:
ИдентификаторПользователяИБ в справочнике Пользователи может потерять связь с записью в таблице v8users.Использование сторонних шестнадцатеричных редакторов (Hex-редакторов) для зачистки таблиц базы данных несет высокий риск безвозвратного повреждения структуры таблиц и потери ссылочной целостности. Разберем корректные способы восстановления доступа.
1. Принудительный запуск процедур обновления
Если сбой прав произошел после наката релиза или перехода с предыдущей версии, запустим клиент 1С с форсированием процедур обновления. Для этого в свойствах ярлыка запуска или через командную строку передадим параметр:
1cv8c.exe ENTERPRISE /F "ПутьКБазе" /C ЗапуститьОбновлениеИнформационнойБазы
Этот ключ заставляет конфигурацию выполнить отложенные обработчики БСП, восстанавливающие предопределенные группы доступа и пересчитывающие права.
2. Программное восстановление привязки пользователя
Если доступ к базе получен в привилегированном режиме (например, при очищенном списке пользователей или через внешнюю обработку), привязку системного администратора к справочнику можно выполнить программно:
УстановитьПривилегированныйРежим(Истина);
// 1. Создаем или получаем системного пользователя ИБ
ПользовательИБ = ПользователиИнформационнойБазы.СоздатьПользователя();
ПользовательИБ.Имя = "Администратор";
ПользовательИБ.ПолноеИмя = "Администратор базы данных";
ПользовательИБ.АутентификацияСтандартная = Истина;
ПользовательИБ.Пароль = "СложныйПароль123";
// Назначаем системную роль администратора
РольАдминистратора = Метаданные.Роли.Найти("АдминистраторСистемы");
Если РольАдминистратора <> Неопределено Тогда
ПользовательИБ.Роли.Добавить(РольАдминистратора);
КонецЕсли;
ПользовательИБ.Записать();
// 2. Создаем или обновляем элемент справочника Пользователи
ПользовательСсылка = Справочники.Пользователи.НайтиПоНаименованию("Администратор");
Если ПользовательСсылка.Пустая() Тогда
ПользовательОбъект = Справочники.Пользователи.СоздатьЭлемент();
ПользовательОбъект.Наименование = "Администратор";
Иначе
ПользовательОбъект = ПользовательСсылка.ПолучитьОбъект();
КонецЕсли;
// Связываем по уникальному идентификатору
ПользовательОбъект.ИдентификаторПользователяИБ = ПользовательИБ.УникальныйИдентификатор;
ПользовательОбъект.Записать();
3. Проверка целостности таблиц базы данных
Для файловых информационных баз при возникновении необъяснимых ошибок доступа обязательно проверим целостность файла 1Cv8.1CD:
chdbfl.exe из каталога bin установленной платформы 1С.