При работе с системой 1С:Предприятие 8 разработчики часто используют механизм «Выгрузить конфигурацию в файлы» для версионирования кода, анализа структуры или групповой разработки. Однако при попытке найти в этих файлах список пользователей информационной базы (ИБ) многие сталкиваются с тем, что данных там просто нет. В этой статье мы разберем по шагам, почему так происходит, где физически хранятся учетные записи и как правильно с ними работать.
Для начала проанализируем архитектуру платформы. Важно понимать, что в 1С существует жесткое разделение на метаданные конфигурации (структура таблиц, программный код, формы) и административные настройки информационной базы. Пользователи информационной базы относятся именно к административным настройкам. Рассмотрим подробнее, что это означает:
Посмотрим на пример из реальной практики: это похоже на загрузку конфигурации из файла .cf. Вы можете загрузить структуру «1С:Бухгалтерии» в пустую базу, но справочник номенклатуры или список сотрудников при этом не появятся. Точно так же обстоит дело и с пользователями ИБ — они живут в самой базе данных, а не в ее программном коде.
Выясним причину, по которой поиск в bin файлах выгрузки бесполезен. Место хранения зависит от варианта развертывания вашей системы. Разберем каждый из них:
В файловом варианте (база .1CD):
Все сведения о пользователях скрыты внутри файла базы данных. Платформа создает в нем специальный внутренний поток (таблицу) под названием v8users. Вы не увидите этот объект через дерево метаданных в Конфигураторе. Для прямого просмотра этой таблицы требуются специализированные низкоуровневые утилиты (например, Tool 1CD), которые позволяют заглянуть внутрь структуры файла базы данных.
В клиент-серверном варианте (SQL):
Если ваша база работает на MS SQL Server, PostgreSQL или другой поддерживаемой СУБД, информация находится в системной таблице v8users. Эта таблица создается платформой автоматически при создании базы. Попробуем проанализировать ее содержимое через средства СУБД: там вы найдете уникальные идентификаторы (GUID), хешированные пароли и настройки аутентификации. Прямое редактирование этой таблицы крайне не рекомендуется, так как это может нарушить целостность системы безопасности платформы. Для детального анализа состава таблиц можно использовать обработку для исследования структуры хранения базы данных.
В современных конфигурациях, построенных на базе Библиотеки стандартных подсистем (БСП), ситуация становится еще интереснее. Проанализируем двухуровневую модель:
ПользовательИнформационнойБазы. Он отвечает за авторизацию (логин, пароль, метод входа) и наличие административных ролей.Справочники.Пользователи. Он содержит контактную информацию, настройки интерфейса и привязку к подразделениям.Эти два объекта связаны между собой через уникальный идентификатор (GUID). Если вы выгрузите конфигурацию и загрузите ее в другую пустую базу, эта связь будет разорвана, так как справочник будет пуст, а список пользователей платформы — не определен.
Если вам необходимо получить список пользователей или изменить их данные, следует использовать встроенный язык 1С. Разберем пример кода, который позволяет перебрать всех существующих пользователей системы:
// Получаем массив всех пользователей информационной базы
ВсеПользователи = ПользователиИнформационнойБазы.ПолучитьПользователей();
Для Каждого ТекущийПользователь Из ВсеПользователи Цикл
// Выводим имя пользователя в сообщение
Сообщить("Логин: " + ТекущийПользователь.Имя + " | Полное имя: " + ТекущийПользователь.ПолноеИмя);
КонецЦикла;
Обратите внимание, что для выполнения этой операции у текущего пользователя должны быть права Администрирование. Этот программный интерфейс позволяет создавать, изменять и удалять учетные записи, а также управлять их паролями и ролями. Для готового решения задачи миграции учётных записей подойдёт обработка для группового переноса пользователей между базами 1С.
Поскольку стандартная выгрузка файлов конфигурации нам не помогает, рассмотрим способы миграции списка пользователей:
СериализаторXDTO. Это позволит передать настройки учетных записей в другую базу данных программно.Важно подчеркнуть вопрос безопасности. Даже если вы найдете, где хранятся данные, прочитать пароль в открытом виде не получится. Рассмотрим, как 1С защищает эти данные: платформа использует односторонние функции хеширования. При вводе пароля система сравнивает хеш введенного значения с тем, что хранится в таблице v8users. Начиная с версии платформы 8.3.15, алгоритмы были существенно усилены, что делает практически невозможным восстановление пароля даже при наличии прямого доступа к файлам базы данных или SQL-таблицам.
Мы выяснили, что пользователи информационной базы — это не часть метаданных, а часть данных самой базы. По этой причине их невозможно найти в папках, полученных при выгрузке конфигурации в файлы. Для работы с ними используйте встроенный объект ПользователиИнформационнойБазы или механизмы полной выгрузки данных системы. Помните о разнице между физическим пользователем в ОС/SQL и логическим элементом справочника в вашей программе.