Перейти к содержимому
Tez Base

Как безопасно пустить ИИ в боевую базу 1С: транзакция с гарантированным откатом

· Опубликовано:

Нейросети и 1С

Есть заманчивый сценарий: пустить ИИ-агента в боевую базу 1С, чтобы он сам посмотрел данные, нашёл аномалию, посчитал показатель, разобрался в структуре. Читающий агент экономит массу времени на диагностике. Но есть и очевидный страх: агент исполняет код, а код в проде может не только читать. Одна ошибочная запись в боевую базу, и последствия придётся разгребать долго. Причём агент напишет такой код спокойным уверенным тоном: языковая модель обязана продолжить последовательность всегда, и разбор её внутреннего устройства на BSL показывает, что отказаться она не умеет в принципе.

Мы решали ровно эту задачу и пришли к паттерну, который даёт агенту читать прод и при этом технически не даёт ему туда записать. Разберём, как он устроен, и, что важнее, где его границы.

Кейс с этой же историей, но короче и с реакцией коллег в комментариях, у нас опубликован на Инфостарте.

Идея: исполнять код агента внутри транзакции, которая всегда откатывается

Механизм простой до изящества. Код, который сгенерировал агент, исполняется не напрямую, а внутри обёртки:

  1. открываем транзакцию;
  2. выполняем код агента (любые чтения, вычисления, обращения к данным);
  3. безусловно откатываем транзакцию в конце, всегда, независимо от того, что код делал.

Если агент случайно или намеренно попытался что-то записать, запись произойдёт внутри транзакции, а откат её сотрёт. База возвращается ровно в то состояние, в котором была до запуска. При этом всё, что агент прочитал и посчитал, у нас на руках: результат вычислений мы забираем до отката.

Обёртка компактная, несколько десятков строк, и её задача одна: гарантировать, что после исполнения кода агента в базе не осталось ни одного изменения. Смысл в безусловности отката. Откат происходит не по итогу проверки “а не записал ли агент чего”, а всегда, по построению. Даже если проверка чего-то не заметила бы, откат всё равно уберёт все изменения.

На таком контуре агент у нас читал под два миллиона строк за один прогон, считал показатели, разбирал структуру, и база после этого была бита в бит той же.

Почему безусловный откат надёжнее проверок

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

Разбор кода это гонка щита и меча. Способов записать в базу много, часть неочевидна, что-то прячется за косвенными вызовами, что-то появится в новой версии платформы. Любой анализатор запрещённых операций рано или поздно чего-то не увидит, и одна пропущенная запись обнулит всю защиту.

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

Честно: чего этот паттерн НЕ закрывает

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

  • Нагрузку. Тяжёлый код агента внутри транзакции нагружает боевой сервер по-настоящему: читает, считает, крутит запросы. Откат убирает изменения, но не убирает потраченные CPU и IO. Запускать это в час пик так же вредно, как любой тяжёлый отчёт.
  • Блокировки. Открытая транзакция на чтение больших объёмов может ставить блокировки и мешать боевым пользователям, пока она живёт. Откат в конце этого не отменяет: пока транзакция шла, она мешала.
  • Внешние эффекты. Если код агента дёргает что-то за пределами базы (HTTP-запрос, запись в файл, отправку сообщения), откат транзакции это не вернёт. Транзакция управляет только данными базы, всё за её границей остаётся сделанным.
  • Чтение чувствительного. Агент читает боевые данные, а значит видит ФИО, суммы, реквизиты. Откат защищает базу от изменений, но не защищает данные от того, чтобы их прочитали и отправили наружу. Это отдельная задача, и решается она обезличиванием (об этом у нас есть отдельный разбор). Только не считайте её решённой одним прогоном: на живой базе движок распознавания трижды приходилось переделывать, и последний раз он молча пропустил реквизит с настоящими номерами физлиц, отчитавшись, что база обезличена полностью - как это выглядело на трёх конфигурациях.

Паттерн отвечает ровно на один вопрос: “не останется ли после агента изменений в базе”. На него он отвечает твёрдым нет. На остальные вопросы безопасности отвечать надо отдельно.

Где это применимо

Read-only доступ через откат хорош для диагностики и анализа: дать агенту посчитать показатель, найти аномалию в данных, разобрать структуру, проверить гипотезу по боевым данным без риска их испортить. Для этих задач он снимает главный страх “а вдруг запишет”. Если же показатели по боевым данным нужны руководителю регулярно, к защите от записи добавляются общие определения выручки и остатков и расчёт, который можно сверить с контрольным отчётом. Это отдельная задача, аналитика данных с нейросетями.

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

Итог

Пускать ИИ в боевую 1С можно, если чётко понимать, от чего именно вы защитились. Транзакция с безусловным откатом закрывает риск остаточных изменений полностью и надёжно, потому что не полагается на полноту проверок. А нагрузку, блокировки, внешние эффекты и утечку прочитанного она не закрывает, и это надо держать в голове.

Мы такие контуры и строим: безопасный доступ инструментов к продуктивным базам 1С для диагностики, где риск для данных снят по построению. Если нужен внешний взгляд на вашу базу без риска для неё, посмотрите нашу услугу обслуживания баз 1С: мы работаем с продом аккуратно и с гарантиями, а не на авось.

Это разбор доступа к одной базе. Когда баз становится десять, схема меняется: появляется отдельный реестр, два круга аутентификации и одна точка входа вместо десяти подключений. Как это устроено и чем приходится платить по безопасности - в статье “MCP для 1С: один сервер на десять баз”.

Могу починить это за вас

Настроим регламентное обслуживание так, чтобы база работала стабильно, бэкапы гарантированно восстанавливались, а диски не кончались внезапно.

Стоимость
450 000 - 600 000 ₸ТЗ и разовая наладка, без налогов; сопровождение - от 150 000 ₸/мес отдельно

Рано писать? Измерьте сами

Чек-ап СУБД под 1С: 40+ проверок с вердиктом по каждой

Открыть обработку

INFOSTART TECH EVENT 2026: конференция для 1с-специалистов. если собираетесь, регистрируйтесь по нашей ссылке. Регистрация →

Читайте также

Регламентное задание 1С не выполняется: порядок проверки и скрипт для консоли

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

Перенос базы 1С с PostgreSQL на MS SQL: смещение дат, индексы и приёмка

Справочник к переезду базы 1С с PostgreSQL на MS SQL Server через ibcmd infobase replicate: какое смещение дат ставить и как узнать текущее, какие ключи индексов шире 900 байт создадутся молча и при чём тут версия SQL Server, чем принимать перенос вместо подсчёта строк. С регламентом по этапам и замерами на трёх базах.

Настройки кластера 1С: как проверить применение и результат

Проверка настроек кластера 1С через RAS: рабочие процессы, расписание перезапуска и память. Сравниваем заданные параметры с фактическим состоянием.