Восстановление базы 1С на MSSQL после атаки шифровальщика: как исправить ошибку считывания вторичной информации?

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

Атаки вирусов-шифровальщиков остаются одной из самых серьезных угроз для корпоративных информационных систем. Ситуация, когда файлы баз данных .mdf и .ldf оказываются зашифрованными, а резервные копии недоступны или повреждены, требует хладнокровного и профессионального подхода.

Рассмотрим типичный сценарий: после атаки удалось частично восстановить файлы базы данных. SQL Server "видит" базу, но при попытке подключения клиентом 1С (как в режиме Предприятия, так и в Конфигураторе) возникает ошибка: "Ошибка считывания вторичной информации". Разберем подробно, почему это происходит и какие шаги мы можем предпринять для спасения данных.

Диагностика проблемы: что именно повреждено?

Прежде чем приступать к "лечению", давайте проанализируем, что происходит внутри файла базы данных. Ошибка "Ошибка считывания вторичной информации" в контексте 1С указывает на то, что платформа не может корректно интерпретировать служебные данные, необходимые для инициализации сеанса.

Вирусы-шифровальщики часто действуют по алгоритму шифрования начала файла (заголовка) или случайных блоков данных для скорости. В формате хранения MS SQL Server это означает следующее:

  1. Повреждение заголовка (Header): Если зашифрованы первые 8 Кб файла (первая страница), SQL Server вообще не сможет подключить базу (Attach), так как не распознает формат. Если база все же подключилась, значит, заголовок либо уцелел, либо был восстановлен (например, взят из пустой базы той же версии).
  2. Повреждение системных таблиц конфигурации: Таблицы, отвечающие за структуру конфигурации (Config, DBSchema, Params), часто располагаются в начале файла данных .mdf. Именно их частичное шифрование приводит к тому, что физически данные есть, но 1С не может сопоставить их с метаданными.

Теперь перейдем к конкретным методам восстановления работоспособности.

Этап 1: Восстановление доступа к SQL и Logs

Часто шифровальщик повреждает файл транзакций .ldf. SQL Server не подключит базу с битым логом. В этом случае нам необходимо пересоздать лог. Выполним следующие действия в Management Studio:

  1. Переведем базу в аварийный режим (Emergency Mode). Это позволит нам работать с ней, даже если она повреждена.
  2. Используем скрипт для пересоздания лога.

Рассмотрим пример кода T-SQL для этой операции:


ALTER DATABASE [ИмяВашейБазы] SET EMERGENCY;
GO
ALTER DATABASE [ИмяВашейБазы] SET SINGLE_USER;
GO
DBCC CHECKDB ([ИмяВашейБазы], REPAIR_ALLOW_DATA_LOSS) WITH ALL_ERRORMSGS;
GO

Обратите внимание на параметр REPAIR_ALLOW_DATA_LOSS. Мы осознанно идем на риск потери части данных, так как альтернатива — полная потеря базы. Этот процесс попытается исправить структуру страниц и, если лог поврежден, SQL Server может предложить создать новый при выполнении команды присоединения базы без лога (через sp_attach_single_file_db или аналогичные процедуры, если база была предварительно отсоединена).

Этап 2: Очистка сеансовых данных (Таблица Params)

Ошибка вторичной информации часто связана с невозможностью прочитать параметры сеанса или пользователя из таблицы Params. В этой таблице хранятся временные настройки, и её очистка безопасна для бизнес-данных.

Попробуем очистить эту таблицу, чтобы заставить 1С пересоздать записи при следующем запуске:


USE [ИмяВашейБазы];
GO
TRUNCATE TABLE [dbo].[Params];
GO

После выполнения этого запроса попробуйте запустить 1С. Если ошибка сохраняется, значит, проблема глубже — в таблице конфигурации.

Этап 3: Восстановление таблицы Config (Метод подмены)

Если структура конфигурации повреждена, 1С не запустится. Однако данные справочников и документов (бизнес-данные) могут быть целы. Эффективный метод, предложенный в профессиональном сообществе, заключается в замене таблицы Config на здоровую из аналогичной конфигурации.

Для этого нам понадобится:

  1. Файл конфигурации .cf точно того же релиза, что был установлен в поврежденной базе. Это критически важно, так как структура таблиц должна совпадать идеально.
  2. Развернутая на том же SQL сервере пустая база данных, в которую мы загрузим этот .cf. Назовем её CleanBase.

Теперь выполним перенос "здоровой" таблицы конфигурации в "больную" базу. Подразумевается, что мы заменяем поврежденные метаданные на корректные.

Внимание! Перед любыми манипуляциями обязательно сделайте копию текущего состояния файлов .mdf (даже если они битые).

В SQL Management Studio выполним следующие шаги (концептуально):

  1. Очистим таблицу Config в поврежденной базе.
  2. Скопируем данные из CleanBase.dbo.Config в DamagedBase.dbo.Config.

-- Очищаем таблицу в целевой базе
USE [DamagedBase];
TRUNCATE TABLE [dbo].[Config];

-- Вставляем данные из чистой базы
INSERT INTO [DamagedBase].[dbo].[Config]
SELECT * FROM [CleanBase].[dbo].[Config];

В современных версиях платформы 1С 8.3 также могут быть важны таблицы DBSchema и ConfigSave. Если простая замена Config не помогла, имеет смысл повторить операцию и для этих таблиц.

Этап 4: Метод "Пересадка данных" (Data Pump)

Если замена конфигурации не помогает или база слишком сильно повреждена на уровне файловой структуры (SQL pages), более надежным, хотя и трудоемким способом, является перенос самих данных в новую базу.

Логика процесса следующая:

  1. Создаем абсолютно чистую базу 1С из .cf файла нужной версии. У нас появляется корректная структура всех таблиц (Справочников, Документов, Регистров), но они пустые.
  2. С помощью скриптов T-SQL переносим данные из таблиц поврежденной базы в новую.

Мы будем переносить только таблицы данных. В базе 1С их имена начинаются с префиксов:

Мы не переносим системные таблицы (Config, v8users, IBVersion и т.д.), так как именно они могут содержать повреждения, блокирующие запуск.

Пример динамического скрипта для переноса одной таблицы (потребуется сгенерировать такие для всех таблиц данных):


-- Пример логики переноса (требует адаптации под конкретные имена таблиц)
INSERT INTO [NewBase].[dbo].[_Reference123]
SELECT * FROM [DamagedBase].[dbo].[_Reference123]

При таком подходе, если какая-то таблица попадет на поврежденный участок диска (зашифрованный сектор), SQL Server выдаст ошибку при чтении. Мы сможем пропустить эту конкретную таблицу, но спасти остальные 99% данных. Это лучше, чем полная потеря базы.

Этап 5: Проверка целостности и удаление битых ссылок

После того как нам удалось запустить базу (либо методом подмены Config, либо переносом данных), необходимо запустить тестирование и исправление.

Однако перед этим вернемся к SQL Server и выполним окончательную проверку целостности:

DBCC CHECKDB ([ИмяВашейБазы]) WITH NO_INFOMSGS;

Если шифровальщик повредил данные внутри таблиц, команда DBCC CHECKDB с параметром исправления может удалить поврежденные страницы. Как упоминалось в анализе проблемы, это может привести к исчезновению целых таблиц (если поврежден заголовок таблицы) или части строк.

После восстановления доступа в режиме Конфигуратора обязательно выполните:

  1. Тестирование и исправление (ТиИ): В меню "Администрирование". Выберите пункты "Проверка логической целостности" и "Проверка ссылочной целостности". Это поможет очистить базу от "битых" ссылок, возникших из-за частичной потери данных.
  2. Выгрузка и загрузка .dt: Если база проходит ТиИ, попробуйте выгрузить её в .dt файл и загрузить обратно в файловый вариант, а затем снова в SQL. Это часто помогает "причесать" внутренние идентификаторы.

Особенности отраслевых решений (Альфа-Авто и другие)

В рассматриваемом случае одной из баз была "Альфа-Авто". При восстановлении таких конфигураций нужно учитывать наличие систем защиты (например, СЛК или Катран). Ключевая информация о лицензиях может храниться в скрытых или защищенных таблицах внутри базы.

Если вы восстановили базу, но программа требует повторной активации или не видит ключи защиты, скорее всего, таблицы защиты были повреждены или не перенесены. В этом случае, возможно, потребуется переустановка системы защиты и повторный ввод лицензий/ключей через службу поддержки разработчика отраслевого решения.

Заключение

Восстановление после шифровальщика — это всегда борьба за минимизацию потерь. Полное восстановление возможно только при наличии целых бэкапов. Однако методы прямой работы с SQL таблицами (очистка Params, подмена Config, выборочный перенос данных) позволяют спасти критически важную бизнес-информацию даже в, казалось бы, безвыходных ситуациях.

Главный совет на будущее: настройте резервное копирование по правилу "3-2-1", где одна копия обязательно должна храниться офлайн или в облаке, недоступном для прямой записи с сервера, чтобы вирус не мог добраться до архивов.

← На главную