Как получить список пользователей 1С через прямой запрос к PostgreSQL?

Системный администратор 1С v8.3 (Управляемые формы) IT и автоматизация бизнеса
← На главную

Ситуации, когда доступ к информационной базе 1С оказывается заблокирован, — например, после некорректного восстановления из бэкапа или при потере пароля администратора, — требуют оперативного вмешательства на уровне системы управления базами данных (СУБД). В таких случаях стандартные средства 1С (Конфигуратор) недоступны, и нам приходится обращаться напрямую к таблицам PostgreSQL. Разберем подробно, как устроено хранение пользователей в 1С и какими запросами можно извлечь нужную информацию.

Где 1С хранит список пользователей?

Для начала проанализируем структуру хранения данных. В старых версиях платформы вся информация о пользователях была сосредоточена исключительно в таблице Params. Если вы сделаете запрос к этой таблице, вы обнаружите запись с параметром users.usr. Однако важно понимать, что данные в поле BinaryData этой таблицы хранятся в бинарном (сериализованном) виде. Прочитать их обычным SELECT не получится — это требует десериализации программными средствами платформы.

В современных версиях платформы 1С:Предприятие 8 (начиная с 8.2.14 и выше) была введена системная таблица v8users. Она является основным источником данных для авторизации. При этом платформа сохраняет дублирование информации в users.usr для обеспечения совместимости и внутренних проверок целостности. Если данные в этих двух местах рассинхронизированы, могут возникнуть проблемы со входом.

Выполнение прямого запроса к таблице v8users

Рассмотрим самый простой и эффективный способ получить список имен пользователей и их описание. Для этого нам понадобится доступ к консоли psql или любому менеджеру запросов (например, pgAdmin). Выполним следующий запрос:


SELECT 
    name AS "Имя для входа", 
    descr AS "Полное имя", 
    admrole AS "Администратор" 
FROM 
    v8users;

Разберем, что мы получим в результате выполнения этого кода:

  1. name — это логин пользователя, который вводится в окне авторизации 1С.
  2. descr — полное имя пользователя, которое обычно отображается в интерфейсе программы.
  3. admrole — флаг, принимающий значение 1 (если у пользователя есть административные права) или 0 (если прав администратора нет). Это поле крайне полезно, если вам нужно быстро найти учетную запись с полными правами, чтобы попытаться восстановить к ней доступ.

Подробный разбор полей таблицы v8users

Проанализируем более глубоко структуру таблицы v8users, чтобы понимать, какие еще данные мы можем извлечь в сложных диагностических случаях:

Если нам необходимо посмотреть список пользователей с учетом их привязки к доменным именам, мы можем использовать такой запрос:


SELECT 
    name, 
    osname, 
    changed 
FROM 
    v8users 
WHERE 
    osname IS NOT NULL;

Как восстановить доступ, если список пользователей пуст или пароли неизвестны?

Выясним причину, по которой после восстановления базы может не пускать в систему. Иногда таблица v8users может оказаться пустой, хотя в справочнике «Пользователи» внутри 1С записи присутствуют. Важно помнить: пользователи информационной базы (системные) и пользователи из справочника — это разные сущности, связанные между собой по UUID.

Если нам нужно экстренно зайти в базу, когда ни один пароль не подходит, мы можем прибегнуть к «сбросу» списка пользователей. Рассмотрим алгоритм действий (обязательно сделайте резервную копию перед этим!): Для автоматической архивации баз перед проведением технических операций применяется программа для автоматической архивации и обслуживания 1С.

  1. Переименуем системную таблицу пользователей, чтобы платформа её «потеряла» и позволила зайти без пароля: ALTER TABLE v8users RENAME TO v8users_old;
  2. После этого при запуске Конфигуратора система не обнаружит ни одного пользователя и позволит войти свободно.
  3. Внутри Конфигуратора создайте нового пользователя с административными правами.
  4. После этого 1С создаст новую таблицу v8users. Теперь можно либо вручную пересоздать остальных пользователей, либо попытаться перенести данные из v8users_old.

Также существует более радикальный метод очистки, который часто применяется системными администраторами для полного обнуления авторизации:


-- Удаляем всех системных пользователей
DELETE FROM v8users;
-- Удаляем бинарный список из настроек параметров базы
DELETE FROM Params WHERE FileName = 'users.usr';

После выполнения этих команд база станет абсолютно «открытой» для любого входа через Конфигуратор, где вы сможете заново настроить права доступа. Для последующей настройки и переноса учетных данных подойдёт инструмент для работы с паролями пользователей.

Связь с метаданными (Справочник Пользователи)

Рассмотрим ситуацию, когда пользователи в списке v8users есть, но вы хотите сопоставить их со справочником в интерфейсе 1С. В коде конфигурации за это отвечает уникальный идентификатор. Чтобы найти таблицу справочника пользователей в PostgreSQL, сначала нужно выяснить ее имя в структуре (так как оно имеет вид _ReferenceXX). Однако, имея прямой доступ к SQL, мы можем ориентироваться на схожесть данных. Для удобного определения соответствия таблиц и метаданных можно использовать обработку для просмотра структуры хранения базы данных.

Помните, что прямое редактирование таблиц СУБД — это крайняя мера. Мы рекомендуем использовать данные запросы только для диагностики (просмотра имен) или в случаях аварийного восстановления доступа. Для всех плановых операций по управлению пользователями всегда используйте штатные средства 1С:Предприятие.

← На главную