Подготовить обезличенный тестовый контур для компании на 60 человек с 1С:УТ и Битрикс24 — это 21 час работы и 25 200 ₽ по ставке администратора. Модельный инцидент, когда боевая выгрузка уезжает не туда с ноутбука подрядчика, обходится в 234 000 ₽ прямых расходов и останавливает проект на две недели. Соотношение примерно один к семи, и именно поэтому копия боевой базы «чтобы быстрее» — самая дорогая экономия в проекте автоматизации.

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

Ниже — что на самом деле лежит в копии базы, пять способов подготовить тестовые данные с трудозатратами и ценой, пять ошибок, после которых обезличивание не считается сделанным, и порядок на случай, когда без боевых данных действительно не обойтись. Все расчёты модельные, ставки взяты те же, что и в остальных материалах этого раздела: администратор — 1 200 ₽/ч, сотрудник — 900 ₽/ч, внешний инженер — 3 500 ₽/ч.

Что на самом деле уезжает вместе с копией базы

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

  • Карточки контрагентов и контактных лиц: ФИО, мобильные телефоны, личные адреса электронной почты, адреса доставки — в модельной компании это 18 000 карточек.
  • Цены и скидки по каждому контрагенту — коммерческая тайна, которая интересна конкуренту больше, чем телефоны.
  • Комментарии менеджеров в сделках: «звонить только после 18, жена в декрете», «директор в разводе, счета на вторую фирму».
  • Вложения к сделкам и договорам: сканы паспортов, доверенности, реквизиты счетов, подписанные акты.
  • Логи обмена между системами — в них те же телефоны и адреса лежат открытым текстом, но про логи не вспоминают вообще.
  • Учётные записи сотрудников с хешами паролей: если в компании пароли повторяются между системами, это готовый ключ к остальному контуру.
  • Настройки обменов, а в них — токены и пароли интеграций. Копия базы очень часто оказывается ещё и копией секретов.
Копия живёт дольше проекта

Архив, выгруженный «на один вечер», через год лежит в папке загрузок, в резервной копии ноутбука, в облачном диске подрядчика и в переписке, через которую его передавали. Ни один из этих экземпляров не отзывается и не удаляется по окончании работ, потому что о них никто не помнит. Единственный надёжный способ не думать про эти копии — не создавать их.

схема процессаobezlichennye-dannye-dlya-testovogo-kontura--01
Схема: что уезжает вместе с копией базы — семь блоков вокруг архива выгрузки

Схема: в центре прямоугольник «архив выгрузки базы», от него семь стрелок к блокам: «18 000 карточек контрагентов», «цены и скидки», «комментарии менеджеров», «вложения: сканы, доверенности», «логи обмена», «учётные записи с хешами паролей», «токены и пароли интеграций». Первый блок выделен и подписан «единственный, о котором обычно думают». Внизу подпись «Ниже по течению: папка загрузок, резервная копия ноутбука, облачный диск, переписка». Чертёжный стиль, подписи по-русски.

Персональные данные — только один из семи блоков, которые уезжают в архиве

Пять способов подготовить тестовые данные

Способы отличаются не столько надёжностью, сколько тем, что остаётся от данных после обработки. Дешёвые способы сохраняют мало и ломают отладку, дорогие — сохраняют форму, но теряют реальные кривые случаи. Трудозатраты ниже — на первую настройку для базы из двух систем; повторные прогоны занимают минуты.

СпособЧто происходит с даннымиПервая настройкаПригодность для отладкиКогда брать
МаскированиеЧасть символов закрывается: +7 921 *--02. Формат и длина сохраняются, значение теряется4–6 ч (4 800–7 200 ₽)Средняя: карточку видно, но по ней нельзя пройти сценарий с уведомлениемДемонстрации, скриншоты, обучение сотрудников
Подмена по словарюЗначение заменяется другим настоящим по форме: фамилия на фамилию, город на город, ИНН на синтетический с верной контрольной суммой8–12 ч (9 600–14 400 ₽)Высокая: данные читаются как настоящие, проходят все проверки форматаОсновной способ для отладки и приёмки
Перемешивание внутри столбцаЗначения тасуются между строками: телефоны настоящие, но у чужих клиентов2–4 ч (2 400–4 800 ₽)Низкая: рвутся связи карточка — заказ — адрес доставкиПочти никогда: дёшево и обратимо, данные остаются настоящими
Урезанная выборкаБерётся 2–5 % записей со всеми их связями, остальное не выгружается вообще4–6 ч (4 800–7 200 ₽)Средняя сама по себе, высокая в связке со словарной подменойВсегда как первый шаг: меньше данных — меньше ущерб
Синтетическая генерацияДанные создаются с нуля по описанию структуры, боевых записей нет ни одной24–40 ч (28 800–48 000 ₽)Низкая по граничным случаям: генератор пишет то, что вы ему объяснили, а ломается всегда необъяснённоеНагрузочное тестирование, демостенд для внешних показов

Рабочая связка — четвёртый способ плюс второй: сначала урезанная выборка, потом словарная подмена по оставшимся записям. Выборка снижает цену ошибки на порядок (540 карточек вместо 18 000), подмена оставляет данные пригодными для отладки. Перемешивание в этот список включено только затем, чтобы его не выбирали: оно выглядит как обезличивание, но телефоны в базе остаются настоящими, а восстановить исходную привязку часто можно по датам документов.

Что обязано пережить обезличивание

Обезличивание считается удачным, если разработчик не заметил подмены, пока не открыл конкретную карточку. Для этого сохраняются пять свойств данных — именно их, а не значения, использует любая отладка.

  1. 1Распределения. Если 4 % контрагентов дают 60 % документов, эта диспропорция должна остаться: на равномерных данных не всплывают ни медленные запросы, ни переполненные списки в интерфейсе.
  2. 2Длины и форматы. Название на 180 символов ломает печатную форму, а не название на 20. Замена должна давать строку той же длины, а не «ООО Тест».
  3. 3Связи между таблицами. Карточка без заказов, заказ без адреса доставки, контактное лицо, привязанное к двум контрагентам, — если выборка режется по одной таблице, половина сценариев не запускается.
  4. 4Редкие граничные случаи. Номер без кода города, ИНН на 12 знаков у индивидуального предпринимателя, отрицательный остаток, контрагент с 400 договорами, документ 2019 года со старой ставкой НДС. Их отбирают вручную и переносят в выборку принудительно.
  5. 5Объём хотя бы одного среза. Если проверяется скорость, нужен полноразмерный справочник — его добивают синтетикой поверх урезанной выборки.

Граничные случаи — самая ценная часть работы и единственная, которую нельзя автоматизировать. Практический приём: перед первой выборкой попросить бухгалтера и старшего менеджера назвать по пять «проблемных» контрагентов и документов — это тот же разговор, что и при разборе качества данных перед внедрением, только короче. Это полчаса разговора, и он экономит недели переписки «у нас не воспроизводится».

Пять ошибок, после которых данные считаются необезличенными

Все пять встречаются регулярно, и все пять объединяет одно: смотрели на поля карточки клиента и не смотрели больше никуда.

  1. 1
    Обратимая замена

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

  2. 2
    Необезличенные комментарии и примечания

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

  3. 3
    Вложения

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

  4. 4
    Логи и очереди обмена

    Журналы интеграций хранят тела запросов с телефонами и адресами. При копировании базы они уезжают вместе с ней, а чистят их в последнюю очередь или никогда. Логи старше недели в тестовом контуре не нужны — их проще удалить целиком.

  5. 5
    Данные, оставшиеся вне базы

    Выгрузки в таблицах, файлы почтовых рассылок, экспорт для маркетплейса, резервная копия недельной давности в том же каталоге. Обезличили базу, а рядом лежит csv с 18 000 строк — и уезжает именно он, потому что он удобнее.

Проверка после прогона занимает 15 минут и делается поиском, а не глазами: ищем в контуре подстроку «+7 9», собаку почтового адреса, десять цифр подряд и слово «паспорт». Если что-то находится — скрипт дописывают, а не объясняют, почему это неопасно.

ПолеВ боевой базеВ тестовом контуреЧто сохранено
Наименование контрагентаНастоящее юрлицоНазвание из словаря вымышленныхДлина строки, кавычки, форма собственности
ФИО контактного лицаНастоящееФамилия и имя из словаряТри части, склоняемость, длина
Мобильный телефонНастоящий номерНомер из диапазона, не выданного операторамФормат, код региона, длина
ИНННастоящийСинтетический с верной контрольной суммой10 или 12 знаков, проходит проверку
Адрес доставкиНастоящийУлица и дом из словаря того же городаГород и район — от них зависят маршруты
Цена и скидкаНастоящиеСдвинуты на коэффициент, если контур уходит наружуСоотношения и вся арифметика документов
Комментарий менеджераСвободный текстЗаглушка той же длиныТолько длина строки
сравнениеobezlichennye-dannye-dlya-testovogo-kontura--02
Карточка контрагента до и после обезличивания: значения заменены, структура и длины сохранены

Сравнение двух карточек контрагента бок о бок, «Боевая база» и «Тестовый контур». Строки совпадают по позиции и длине: наименование, ФИО контактного лица, мобильный телефон, ИНН (10 или 12 знаков), адрес доставки, цена со скидкой, комментарий менеджера. Слева значения показаны сплошной заливкой-«текстом», справа — теми же по длине строками из словаря, телефон подписан «диапазон, не выданный операторам», ИНН подписан «синтетический, контрольная сумма верна», комментарий — «заглушка той же длины». Под карточками общая подпись «Сохранены длины, форматы и связи; заменены значения». Чертёжный стиль, подписи по-русски.

Слева и справа — одинаковая по форме карточка и совершенно разное содержание

Скрипт обезличивания — такой же артефакт проекта, как код

Разовое обезличивание бессмысленно. Через месяц тестовый контур отстанет от боевого, в нём не будет новых полей и новых справочников, и кто-нибудь перезальёт его боевой копией — «один раз, срочно». Поэтому обезличивание оформляется не как задача, а как процедура с расписанием и владельцем.

  1. 1
    Расписание

    Перезаливка раз в месяц и обязательно перед приёмкой этапа. Прогон занимает около 40 минут, из них 30 — восстановление копии и 10 — сам скрипт. Двенадцать перезаливок в год — это 8 часов и 9 600 ₽.

  2. 2
    Один владелец

    Перезаливку делает администратор заказчика, а не подрядчик: доступ к боевой базе остаётся на вашей стороне, наружу отдаётся уже обработанный дамп. Это единственное распределение ролей, при котором боевую копию физически некому увезти.

  3. 3
    Хранение скрипта

    Скрипт лежит в репозитории проекта рядом с кодом, а не в переписке и не на диске у конкретного инженера. Вместе с ним — словари подмены и список принудительно переносимых граничных записей.

  4. 4
    Обновление вместе со схемой

    Добавили в CRM поле «второй телефон» — в тот же день дописали правило в скрипт. Правило встраивается в приёмку задачи: новое поле с персональными данными без правила обезличивания задачу не закрывает.

  5. 5
    Передача по акту

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

Проверяемый признак вместо обещания

В акте приёмки этапа полезна строка: «тестовый контур развёрнут из обезличенной выборки, скрипт обезличивания и словари переданы заказчику, дата последней перезаливки — такая-то». Это одна строка, но она превращает разговор о безопасности в проверяемый факт. Порядок приёмки и состав передаваемых артефактов мы разбирали отдельно в материале о приёмке работ.

Деньги: 25 200 ₽ подготовки против 234 000 ₽ инцидента

Модельная компания: оптовая торговля, 60 человек, 1С:УТ и Битрикс24, 18 000 карточек контрагентов, 260 000 строк документов за три года. Подрядчик дорабатывает обмен между системами, проект рассчитан на десять недель.

Подготовка обезличенного тестового контура (администратор 1 200 ₽/ч)
Инвентаризация полей с персональными данными в двух системах — 5 ч6 000 ₽
Урезанная выборка: отбор 3 % записей со всеми связями — 4 ч4 800 ₽
Словарная подмена имён, названий, телефонов, ИНН и адресов — 8 ч9 600 ₽
Прогон, проверка связей и принудительный перенос граничных записей — 2 ч2 400 ₽
Инструкция по перезаливке и передача администратору — 2 ч2 400 ₽
Ежемесячная перезаливка: 12 × 40 мин = 8 ч в год9 600 ₽
Итого25 200 ₽ разово — два с половиной рабочих дня. С перезаливками первый год стоит 34 800 ₽

Три процента от 18 000 карточек — это 540 записей. Их хватает на отладку сценариев и не хватает на то, чтобы утечка стала событием федерального масштаба. Теперь другая сторона расчёта.

Модельный инцидент: на седьмой неделе проекта инженер подрядчика выгрузил боевую копию «чтобы воспроизвести ошибку с ценами» и положил её в свой облачный диск. Ссылка на папку оказалась открытой. Обнаружено это через месяц, когда клиент сообщил, что ему звонят с предложением тех же позиций по вашим ценам.

Модельная стоимость инцидента с боевой выгрузкой у подрядчика
Разбор: что было в копии, куда она попала, кто её открывал — 12 ч × 1 200 ₽/ч14 400 ₽
Смена паролей и перевыпуск ключей интеграций из настроек копии — 14 ч × 1 200 ₽/ч16 800 ₽
Юрист: уведомления регулятору в сроки 24 и 72 часа, переписка60 000 ₽
Оповещение и обзвон 600 ключевых контрагентов: 40 ч × 900 ₽/ч36 000 ₽
Остановка проекта и перезапуск контура: внешний инженер 24 ч × 3 500 ₽/ч84 000 ₽
Пересборка тестового контура уже правильно — 19 ч × 1 200 ₽/ч22 800 ₽
Итого234 000 ₽ прямых расходов — в 6,7 раза больше, чем весь первый год порядка

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

графикobezlichennye-dannye-dlya-testovogo-kontura--03
Два столбца: 34 800 рублей за первый год обезличивания против 234 000 рублей за один инцидент

Столбиковая диаграмма из двух столбцов в рублях. Левый низкий столбец «Обезличенный контур, первый год — 34 800 ₽» с разбивкой на два сегмента: подготовка 25 200 ₽ и перезаливки 9 600 ₽. Правый высокий столбец «Один инцидент с боевой выгрузкой — 234 000 ₽» с разбивкой на шесть сегментов: разбор 14 400 ₽, смена ключей 16 800 ₽, юрист 60 000 ₽, обзвон 36 000 ₽, внешний инженер 84 000 ₽, пересборка контура 22 800 ₽. Между столбцами подпись «×6,7». Под правым столбцом пометка серым: «штраф и отток клиентов в расчёт не входят». Чертёжный стиль, подписи по-русски.

Разница почти семикратная, и это без учёта штрафа и оттока клиентов

Когда без боевых данных не обойтись — и что записать в договор

Такие случаи есть, и делать вид, что их не бывает, — значит подтолкнуть команду к тихой выгрузке в обход правил. Ошибка воспроизводится только на конкретном документе; расхождение в сверке видно на реальных суммах; миграция проверяется на боевом объёме. Правильный ответ — не запрет, а четыре условия, при которых доступ выдаётся.

  1. 1Окно. Доступ открывается на конкретный интервал — например, с 10:00 до 14:00 одного дня, — и закрывается по будильнику, а не по завершении задачи. Задача может тянуться неделю, окно продлевается отдельной заявкой.
  2. 2Именная учётная запись. Не общая «integrator», а запись на конкретного инженера. Общая учётка делает невозможным и расследование, и отзыв: её нельзя выключить, не остановив работу всей команды. Матрицу «что просят и чего на самом деле достаточно» мы приводили в опорном материале раздела о доступах подрядчику.
  3. 3Работа внутри вашего контура, без выгрузки. Инженер подключается к вашему серверу через удалённый рабочий стол, права на экспорт и на копирование в буфер отключены. Смотреть можно, увозить нельзя.
  4. 4Наблюдение и запись. Сессия записывается или сопровождается вашим администратором, а факт доступа фиксируется в журнале: кто, когда, к каким данным, по какой задаче. Это же запись потом закрывает вопрос «а что он там смотрел».

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

  • Тестовый контур наполняется обезличенной выборкой; выгрузка боевой базы за пределы контура заказчика не производится.
  • Обезличивание выполняет заказчик; подрядчик получает уже обработанный набор данных и не имеет доступа к исходному.
  • Доступ к боевым данным выдаётся именными учётными записями на ограниченное время по письменной заявке с указанием задачи.
  • Перечень лиц со стороны подрядчика, допущенных к данным, ведётся письменно и обновляется при смене состава команды.
  • Скрипт обезличивания, словари и инструкция по перезаливке передаются заказчику при закрытии проекта и входят в состав результата работ.
этапыobezlichennye-dannye-dlya-testovogo-kontura--04
Лента доступа к боевым данным: заявка, окно с 10 до 14, работа внутри контура, запись, закрытие

Горизонтальная лента из пяти этапов с подписями: «Письменная заявка: задача, состав данных, срок» → «Именная учётная запись заведена» → «Окно 10:00–14:00, работа через удалённый рабочий стол, экспорт отключён» → «Сессия записана, факт доступа в журнале» → «Учётная запись отключена по будильнику». Под третьим этапом пометка «смотреть можно, увозить нельзя», под пятым — «отзыв по времени, а не по готовности задачи». Чертёжный стиль, подписи по-русски.

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

Когда обезличивание не нужно

Обезличивание — это работа, и она не всегда окупается. Четыре ситуации, в которых 25 200 ₽ и два с половиной дня лучше не тратить.

  • В базе нет персональных данных и коммерческой тайны: справочник номенклатуры, техкарты, нормативы. Обезличивать нечего, кроме, возможно, закупочных цен.
  • Подрядчик работает только внутри вашего контура и не имеет права экспорта. Тогда защиту даёт ограничение прав и запись сессий, а не подмена значений; это дешевле и надёжнее.
  • Данных мало — до нескольких сотен записей, и они целиком укладываются в справочник на две страницы. Проще собрать тестовый набор руками за час, чем писать скрипт на 21 час.
  • Проект длится неделю и не касается клиентской базы: правка печатной формы, настройка отчёта, доработка прав. Разворачивать процедуру ради одной задачи дороже, чем сама задача.

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

Тестовый контур должен повторять форму ваших данных, а не их содержание. Всё, что нужно для отладки, — структура, объём и кривые случаи — переживает обезличивание. Не переживают его только те данные, из-за которых вы и боитесь утечки.