Как добавить пользователя с полными правами в базу 1С через SQL без удаления существующих?

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

В практике администрирования баз данных 1С на СУБД MS SQL Server регулярно возникают экстренные ситуации, когда требуется восстановить доступ к информационной базе. Это может быть связано с увольнением «озлобленного» администратора, который заблокировал учетные записи, случайной потерей пароля единственного пользователя с полными правами или необходимостью внедрения автоматизированных систем мониторинга без остановки работы предприятия.

В этой статье мы подробно разберем, почему стандартные SQL-запросы добавления записей не работают напрямую, детально проанализируем структуру хранения пользователей 1С в СУБД и рассмотрим пошаговые сценарии решения проблемы: от аварийного обхода авторизации до безопасного DBA-метода «открытого Конфигуратора», который позволяет добавить нового администратора без потери существующих учетных записей.

Почему простой SQL-запрос на добавление (INSERT) не сработает

Многие специалисты, впервые столкнувшись с СУБД-версией 1С, предполагают, что для добавления пользователя достаточно выполнить стандартный запрос INSERT в таблицу пользователей. Однако архитектура платформы «1С:Предприятие 8» устроена гораздо сложнее. Сведения о пользователях информационной базы распределены и хранятся одновременно в двух местах:

  1. Таблица v8users. В этой таблице находятся плоские данные: уникальные идентификаторы (UUID), имена пользователей, настройки операционной системы для аутентификации и хэшированные пароли.
  2. Таблица Params (запись с FileName = 'users.usr'). Это ключевое препятствие для прямого редактирования. В поле Data этой таблицы в бинарном зашифрованном/сжатом виде хранится сериализованный список абсолютно всех пользователей системы, их привязка к ролям, настройки интерфейса и другие внутренние параметры авторизации платформы.

Поскольку файл users.usr представляет собой единый упакованный бинарный поток во внутреннем формате 1С, невозможно написать простой SQL-запрос, который бы корректно добавил в него строчку. Если вы просто вставите запись в v8users, платформа обнаружит рассинхронизацию с файлом users.usr в таблице Params и выдаст критическую ошибку при попытке входа, либо просто проигнорирует новую запись.

Именно поэтому для решения задачи применяются обходные методы, которые мы разберем далее.

Способ 1. Аварийный обход авторизации (метод временного переименования)

Рассмотрим метод, предложенный в обсуждении на форуме. Этот способ используется, когда нужно срочно зайти в базу под полными правами, а учетные данные администратора утеряны. Суть метода заключается в том, чтобы временно «спрятать» от платформы таблицы авторизации. В этом случае 1С посчитает базу абсолютно пустой и впустит любого пользователя без пароля с полными правами.

Выполним в SQL Server Management Studio (SSMS) следующий скрипт:


-- Переименовываем таблицу со списком пользователей платформы
EXEC sp_rename 'v8users', 'v8users_old';
GO 

-- Переименовываем файл настроек пользователей в таблице Params
UPDATE Params 
SET FileName = 'users.usr_old' 
WHERE FileName = 'users.usr';
GO

Как это работает:

После выполнения данного скрипта при попытке зайти в базу через Конфигуратор платформа не обнаружит ни таблицы v8users, ни файла users.usr. Система решит, что в базе нет ни одного пользователя, и позволит вам беспрепятственно войти. Вы сможете выполнять любые административные действия.

Важное предостережение: этот метод «некрасивый» и деструктивный, если использовать его в лоб. Если вы зайдете в Конфигуратор и создадите там нового пользователя, платформа сгенерирует новые таблицы v8users и users.usr, затерев старые. Если же вы вернете имена таблиц обратно скриптом, то новый созданный вами пользователь пропадет, а старые вернутся. Чтобы решить эту дилемму и сохранить всех пользователей, существует специальный алгоритм.

Способ 2. Восстановление доступа с сохранением пользователей (метод «открытого Конфигуратора»)

Этот классический профессиональный DBA-прием позволяет обойти авторизацию, зайти в Конфигуратор без пароля, но при этом гарантированно сохранить всех старых пользователей и корректно добавить нового администратора. Метод базируется на том, что Конфигуратор считывает список пользователей в оперативную память один раз — в момент своего запуска.

Разберем процесс по шагам:

Шаг 1. Подготовка и создание резервных копий таблиц

Для начала обезопасим наши данные. Создадим резервные копии таблиц авторизации прямо внутри базы данных и очистим оригинальные таблицы, чтобы сбросить пароли:


-- Создаем резервные копии таблиц пользователей
SELECT * INTO v8users_backup FROM v8users;
SELECT * INTO Params_backup FROM Params WHERE FileName = 'users.usr';

-- Очищаем рабочие таблицы авторизации
DELETE FROM v8users;
DELETE FROM Params WHERE FileName = 'users.usr';

Шаг 2. Запуск Конфигуратора

Запустите «1С:Предприятие» в режиме Конфигуратора. Поскольку рабочие таблицы очищены, система не спросит пароль и откроет интерфейс администратора.

Критически важно: не закрывайте Конфигуратор на следующих шагах! Держите его открытым.

Шаг 3. Восстановление оригинальных данных в SQL-базе

Не закрывая запущенный Конфигуратор, вернитесь в SQL Server Management Studio. Теперь нам нужно восстановить исходных пользователей из созданных ранее бэкапов. Выполните следующий скрипт:


-- Очищаем пустую таблицу v8users, которую платформа могла успеть инициализировать при старте
DELETE FROM v8users;

-- Восстанавливаем оригинальные данные из резервных копий
INSERT INTO v8users SELECT * FROM v8users_backup;
INSERT INTO Params (FileName, Data, Size) 
SELECT FileName, Data, Size FROM Params_backup WHERE FileName = 'users.usr';

-- Удаляем временные таблицы резервных копий, чтобы не засорять базу данных
DROP TABLE v8users_backup;
DROP TABLE Params_backup;

Шаг 4. Добавление нового администратора средствами 1С

Возвращаемся в наше открытое окно Конфигуратора. Переходим по пути: Администрирование -> Пользователи.

Поскольку на Шаге 3 мы вернули оригинальные таблицы на место, Конфигуратор при обращении к списку пользователей прочитает восстановленные данные из базы. Вы увидите весь список ваших старых пользователей!

Теперь мы можем безопасно нажать кнопку «Добавить», создать нового пользователя (например, учетную запись мониторинга или нового системного администратора), задать ему пароль и обязательно отметить галочками роли с полными правами (например, «Администратор системы» и «Полные права»).

Нажмите «ОК» для сохранения. В этот момент запущенный Конфигуратор самостоятельно пересчитает хэши, упакует данные и корректно перезапишет бинарный файл users.usr в таблице Params СУБД, добавив туда новую запись и сохранив всех старых пользователей в целости и сохранности.

Особенности работы в современных конфигурациях (БСП)

Проводя манипуляции на уровне СУБД и платформы, важно помнить о прикладном уровне. Если ваша база построена на современных конфигурациях (например, 1С:ERP, 1С:Комплексная автоматизация, 1С:Управление торговлей 11 или 1С:Бухгалтерия 3.0), в них активно используется Библиотека стандартных подсистем (БСП).

В таких конфигурациях авторизация контролируется не только платформой, но и программным кодом самой конфигурации:

Решение: сразу после добавления пользователя описанным выше методом «открытого Конфигуратора» зайдите в базу в режиме «1С:Предприятие» под созданной учетной записью. Если система предложит создать нового пользователя в справочнике, согласитесь. Затем перейдите в раздел Администрирование -> Настройки пользователей и прав -> Пользователи, найдите вашу новую учетную запись и убедитесь, что она включена в группу доступа «Администраторы».

Способ 3. Легальный программный метод через COM-соединение

Если вам необходимо автоматизировать процесс создания пользователей (например, для систем автоматического мониторинга) и вы хотите избежать прямого вмешательства в таблицы SQL, которое нарушает условия лицензионного соглашения 1С, используйте штатное COM-соединение или Automation-сервер.

Программный скрипт на языке VBScript, PowerShell или Python может подключиться к базе через COM-объект и создать пользователя абсолютно легально. Посмотрим на пример кода на встроенном языке 1С, который можно запустить через внешнюю обработку или выполнить через COM-соединение:


// Создание нового пользователя на уровне платформы
НовыйПользователь = ПользователиИнформационнойБазы.СоздатьПользователя();
НовыйПользователь.Имя = "MonitoringAdmin";
НовыйПользователь.ПолноеИмя = "Администратор Мониторинга СУБД";
НовыйПользователь.Пароль = "StrongPassword2026!";
НовыйПользователь.АутентификацияСтандартная = Истина;

// Поиск и добавление роли "Полные права"
Для Каждого ТекущаяРоль Из Метаданные.Роли Цикл
    Если ТекущаяРоль.Имя = "ПолныеПрава" Или Текущая Роль.Имя = "АдминистраторСистемы" Тогда
        НовыйПользователь.Роли.Добавить(ТекущаяРоль);
    КонецЕсли;
КонецЦикла;

// Запись пользователя штатными средствами платформы
НовыйПользователь.Записать();

Этот способ гарантирует 100% сохранность структуры базы данных, корректно обновляет таблицы v8users и Params и полностью соответствует лицензионной политике компании «1С».

Резюме и рекомендации по безопасности

Манипуляции с таблицами СУБД в обход штатных механизмов 1С — это крайняя мера, применимая в аварийных ситуациях или при восстановлении доступа после инцидентов безопасности. Перед выполнением любых запросов UPDATE или DELETE в вашей рабочей базе данных всегда делайте полную резервную копию базы средствами MS SQL Server (создание .bak файла). Помните, что метод «открытого Конфигуратора» оставляет базу временно доступной без пароля на несколько минут, поэтому данные работы рекомендуется проводить в технологическое окно, когда другие пользователи отключены от системы.

← На главную