Ситуации, когда доступ к информационной базе 1С оказывается заблокирован, — например, после некорректного восстановления из бэкапа или при потере пароля администратора, — требуют оперативного вмешательства на уровне системы управления базами данных (СУБД). В таких случаях стандартные средства 1С (Конфигуратор) недоступны, и нам приходится обращаться напрямую к таблицам PostgreSQL. Разберем подробно, как устроено хранение пользователей в 1С и какими запросами можно извлечь нужную информацию.
Для начала проанализируем структуру хранения данных. В старых версиях платформы вся информация о пользователях была сосредоточена исключительно в таблице Params. Если вы сделаете запрос к этой таблице, вы обнаружите запись с параметром users.usr. Однако важно понимать, что данные в поле BinaryData этой таблицы хранятся в бинарном (сериализованном) виде. Прочитать их обычным SELECT не получится — это требует десериализации программными средствами платформы.
В современных версиях платформы 1С:Предприятие 8 (начиная с 8.2.14 и выше) была введена системная таблица v8users. Она является основным источником данных для авторизации. При этом платформа сохраняет дублирование информации в users.usr для обеспечения совместимости и внутренних проверок целостности. Если данные в этих двух местах рассинхронизированы, могут возникнуть проблемы со входом.
Рассмотрим самый простой и эффективный способ получить список имен пользователей и их описание. Для этого нам понадобится доступ к консоли psql или любому менеджеру запросов (например, pgAdmin). Выполним следующий запрос:
SELECT
name AS "Имя для входа",
descr AS "Полное имя",
admrole AS "Администратор"
FROM
v8users;
Разберем, что мы получим в результате выполнения этого кода:
Проанализируем более глубоко структуру таблицы v8users, чтобы понимать, какие еще данные мы можем извлечь в сложных диагностических случаях:
bytea, содержащее дополнительные настройки пользователя в бинарном виде.Если нам необходимо посмотреть список пользователей с учетом их привязки к доменным именам, мы можем использовать такой запрос:
SELECT
name,
osname,
changed
FROM
v8users
WHERE
osname IS NOT NULL;
Выясним причину, по которой после восстановления базы может не пускать в систему. Иногда таблица v8users может оказаться пустой, хотя в справочнике «Пользователи» внутри 1С записи присутствуют. Важно помнить: пользователи информационной базы (системные) и пользователи из справочника — это разные сущности, связанные между собой по UUID.
Если нам нужно экстренно зайти в базу, когда ни один пароль не подходит, мы можем прибегнуть к «сбросу» списка пользователей. Рассмотрим алгоритм действий (обязательно сделайте резервную копию перед этим!): Для автоматической архивации баз перед проведением технических операций применяется программа для автоматической архивации и обслуживания 1С.
ALTER TABLE v8users RENAME TO v8users_old;
v8users. Теперь можно либо вручную пересоздать остальных пользователей, либо попытаться перенести данные из v8users_old.Также существует более радикальный метод очистки, который часто применяется системными администраторами для полного обнуления авторизации:
-- Удаляем всех системных пользователей
DELETE FROM v8users;
-- Удаляем бинарный список из настроек параметров базы
DELETE FROM Params WHERE FileName = 'users.usr';
После выполнения этих команд база станет абсолютно «открытой» для любого входа через Конфигуратор, где вы сможете заново настроить права доступа. Для последующей настройки и переноса учетных данных подойдёт инструмент для работы с паролями пользователей.
Рассмотрим ситуацию, когда пользователи в списке v8users есть, но вы хотите сопоставить их со справочником в интерфейсе 1С. В коде конфигурации за это отвечает уникальный идентификатор. Чтобы найти таблицу справочника пользователей в PostgreSQL, сначала нужно выяснить ее имя в структуре (так как оно имеет вид _ReferenceXX). Однако, имея прямой доступ к SQL, мы можем ориентироваться на схожесть данных. Для удобного определения соответствия таблиц и метаданных можно использовать обработку для просмотра структуры хранения базы данных.
Помните, что прямое редактирование таблиц СУБД — это крайняя мера. Мы рекомендуем использовать данные запросы только для диагностики (просмотра имен) или в случаях аварийного восстановления доступа. Для всех плановых операций по управлению пользователями всегда используйте штатные средства 1С:Предприятие.