Нередко системные администраторы и специалисты 1С сталкиваются с ситуацией, когда после создания нового пользователя или обновления конфигурации вход в информационную базу становится невозможен: система выдает ошибку о недостаточности прав доступа. При этом войти под созданной учетной записью удается только в том случае, если ей назначена системная роль Администратор системы. Разберем детально, почему так происходит в современных типовых конфигурациях на платформе 1С:Предприятие 8.3, в чем кроется архитектурная причина и как правильно настроить права учетных записей.
Проанализируем механизм авторизации и хранения учетных записей. В современных типовых конфигурациях, таких как «Бухгалтерия предприятия 3.0», «ERP 2», «Управление торговлей 11» и «ЗУП 3», используется Библиотека стандартных подсистем (БСП). В отличие от старых версий (например, 1С:Бухгалтерия 2.0 на обычных формах), работа с пользователями здесь разделена на два независимых уровня:
ПользователиИнформационнойБазы (пользователи ИБ), с которыми мы привыкли работать через Конфигуратор (меню «Администрирование» → «Пользователи»).Справочник.Пользователи, а также сопутствующие регистры подсистемы управления доступом (РегистрСведений.ТаблицыГруппДоступа, РегистрСведений.СоставыГруппПользователей и другие).Связь между этими двумя сущностями устанавливается не на уровне ядра платформы, а программным кодом конфигурации через специальный реквизит справочника ИдентификаторПользователяИБ, в котором сохраняется УникальныйИдентификатор системной учетной записи.
Рассмотрим, что происходит, когда администратор создает учетную запись напрямую через Конфигуратор: создается объект системного пользователя, но в справочнике Справочник.Пользователи соответствующая запись не появляется. В результате при запуске программы в процедурах ПередНачаломРаботыСистемы и ПриНачалеРаботыСистемы механизмы БСП пытаются сопоставить текущего пользователя со справочником. Не найдя сопоставления и базовых прав (таких как БазовыеПраваБСП или БазовыеПраваБП), система аварийно завершает запуск с сообщением о нарушении прав доступа. Исключение составляет лишь роль Администратор системы, которая обходит программные проверки БСП на запуск прикладной подсистемы.
Разберем базовый и наиболее правильный алгоритм заведения учетных записей в типовых решениях. Всю работу с пользователями и назначением им прав необходимо выполнять исключительно в режиме «1С:Предприятие» под учетной записью с полными административными правами.
Выполним следующие шаги:
При записи элемента справочника программа автоматически создаст связанного пользователя информационной базы на уровне платформы, назначит ему необходимые технические роли и сформирует записи в служебных регистрах прав.
Если пользователей много или они были массово выгружены в базу на уровне платформы, ручное пересоздание может занять много времени. Рассмотрим, как программно связать существующего системного пользователя со справочником Справочник.Пользователи.
Для этого воспользуемся внешней обработкой или встроенным языком 1С. Разберем пример кода, который выполняет поиск системного пользователя по имени и связывает его с элементом справочника:
ИмяПользователяДляСвязки = "ИвановИИ";
// 1. Получаем пользователя информационной базы на уровне платформы
ПользовательИБ = ПользователиИнформационнойБазы.НайтиПоИмени(ИмяПользователяДляСвязки);
Если ПользовательИБ <> Неопределено Тогда
УникальныйИД = ПользовательИБ.УникальныйИдентификатор;
// 2. Ищем или создаем элемент в справочнике Пользователи
СсылкаПользователя = Справочники.Пользователи.НайтиПоНаименованию(ИмяПользователяДляСвязки);
Если СсылкаПользователя.Пустая() Тогда
ОбъектПользователь = Справочники.Пользователи.СоздатьЭлемент();
ОбъектПользователь.Наименование = ИмяПользователяДляСвязки;
Иначе
ОбъектПользователь = СсылкаПользователя.ПолучитьОбъект();
КонецЕсли;
// 3. Заполняем служебный реквизит идентификатора
ОбъектПользователь.ИдентификаторПользователяИБ = УникальныйИД;
// Отключаем стандартные проверки БСП при программной записи
ОбъектПользователь.ОбменДанными.Загрузка = Истина;
ОбъектПользователь.Записать();
Сообщить("Пользователь " + ИмяПользователяДляСвязки + " успешно связан со справочником.");
Иначе
Сообщить("Пользователь ИБ с именем " + ИмяПользователяДляСвязки + " не найден в Конфигураторе.");
КонецЕсли;
После выполнения связки необходимо обязательно зайти в режим «1С:Предприятие» и назначить пользователю нужные группы доступа через форму справочника.
Бывают ситуации, когда пользователь корректно заведен в справочнике, но после обновления релиза конфигурации доступ блокируется. Выясним причину: при обновлении структуры метаданных служебные таблицы прав доступа могут стать неактуальными либо в базе могут выполняться регламентные процедуры.
Проанализируем сопутствующие факторы и выполним диагностику:
// Принудительное обновление служебных параметров подсистемы управления доступом
УправлениеДоступом.ОбновитьПараметрыОграниченияДоступа();
Выполнение указанных рекомендаций устраняет конфликт авторизации и позволяет пользователям входить в базу с назначенными прикладными правами без необходимости назначения роли Администратор системы.