Быстрый старт в маскировании данных PostgreSQL с инструментом pg_anon

Привет, Хабр!
Меня зовут Александр Дубов, я старший инженер в команде Tantor Labs.
Давайте поговорим о маскировании данных — не самом гламурном, но жизненно важном инструменте.
С каждым годом объем персональных данных, которые обрабатывают компании, растет как снежный ком. Параллельно ужесточаются и требования регуляторов: с 30 мая 2025 г. в России штрафы за нарушения в работе с персональной информацией вырастают в разы. Без маскирования — как без зонта в грозу: один неверный шаг, и репутация компании под ударом, оно предотвращает утечки и помогает соответствовать нормативным требованиям, таким как требования ФЗ №152 «О персональных данных». С передачей же данных «как есть» сопряжен ряд рисков: финансовые и репутационные потери, нарушение законодательства, штрафы и использование данных злоумышленниками.
Чтобы избежать подобных рисков, нужны гибкие инструменты обезличивания. Один из них — opensource-инструмент pg_anon. Он маскирует конфиденциальные данные, помогая соблюдать закон, защищая информацию и сохраняя её пригодность для анализа. Помимо общедоступной версии, существует и коммерческая реализация, но это предмет отдельной беседы, а разговор о бесплатной лучше начать с азов.
Маскирование данных: что это, для чего, и что делает pg_anon?
Маскирование — это изменение данных так, чтобы скрыть личную или конфиденциальную информацию, но сохранить их структуру и целостность. Например:
Имена и адреса, учетные или корпоративные данные заменяются на случайные, но правдоподобные аналоги.
Номера телефонов частично скрываются: +7 950 *** ** **.
Номера карт или банковские реквизиты шифруются или заменяются на тестовые номера.
Медицинские диагнозы, истории болезни превращаются в обезличенные.
Зачем это нужно?
Чтобы передавать данные подрядчикам или аналитикам без риска утечки.
Чтобы разработчики тестировали функции на реалистичных, но безопасных данных.
Чтобы избежать штрафов по 152-ФЗ и сохранить репутацию компании.
Типичные сценарии:
Создание копии рабочей базы для тестовой среды.
Подготовка данных для маркетингового исследования.
Демонстрация функционала на конференции без показа реальной информации о клиентах.
4 ключевых метода маскирования:
Замена — подлинные данные заменяются на вымышленные. Пример: «Иван Петров» → «Сергей Волков».
Обфускация — часть информации скрывается. Пример: email vasya@domain.com преобразуется в v***@domain.com.
Шифрование — данные преобразуются так, чтобы их можно было восстановить только с ключом. Используется для номеров карт или паспортов.
Генерация — создание новых данных по заданным правилам (например, случайные даты рождения в определенном диапазоне).
pg_anon — рабочий инструмент от «Тантор Лабс» для анонимизации данных в PostgreSQL, который дает следующие возможности:
Создание и использование словарей с правилами маскирования.
Интеграция с любой актуальной версией PostgreSQL.
Режимы работы для создания дампов и восстановления данных.
Работы с БД на другом хосте.
Ключевой особенностью pg_anon является система шаблонов маскирования, которые, будучи прописаны один раз, «покрывают» большинство типовых структур баз данных. Вместо того чтобы вручную создавать правила для каждого поля, можно использовать готовые политики анонимизации под распространённые сценарии — будь то персональные данные, платёжная информация или логины пользователей. Это не только экономит время на первоначальную настройку, но и гарантирует согласованность данных при дальнейшем использовании, поскольку шаблоны автоматически применяются ко всем новым таблицам с аналогичной структурой.
Установка pg_anon
Перед установкой убедитесь, что на вашем хосте установлены:
Python 3.8+
venvдля PythonGit и pip
PostgreSQL или иная СУБД на его основе (например, Tantor Postgres)
Клонируйте репозиторий и перейдите в каталог pg_anon:
|
Создайте виртуальное окружение и активируйте его:
|
Установите зависимости:
|
Проверьте, что установка завершена успешно:
|
Если всё подготовленно корректно, то вы увидите основные ключи для работы с инструментом.
Инициализация БД
Для работы с целевой БД ее сперва следует инициализировать:
|
В процессе инициализации БД появится схема с функциями анонимизации anon_funcs:
|
Создание словаря анонимизации
Для обнаружения чувствительных данных pg_anon использует мета-словарь — это отдельный файл с описанием правил анонимизации для БД (если базы типовые, словарь можно использовать общий). Он помогает настроить обработку чувствительных данных. Чтобы создать такой мета-словарь:
Подключитесь к БД, используя административный доступ. Убедитесь, что у вас есть права на чтение схемы данных и анализ таблиц.
Проанализируйте структуру данных, определите, какие таблицы и поля содержат чувствительную информацию. Если структура БД плохо документирована — обсудите с разработчиками, какие данные могут быть конфиденциальными, или изучите данные вручную, например, через запросы к таблицам.
Определите конфиденциальные поля. Например, можно выделить следующие:
Таблица
Customers: поляcustomername,contactname,address.Поля с шаблоном
*nameв других таблицах. Поляphone, которые часто содержат телефонные номера.Поля с датами, такие как
orderdateиbirthdate.
Определите типы данных, например:
Поля с текстовыми данными (
varchar) могут содержать имена, адреса и другие строки.Поля с датами (
timestamp) могут содержать конфиденциальную временную информацию.
Для большей безопасности добавьте обработку дополнительных данных, например, регулярных выражений для номеров банковских карт, ИНН, паспортных данных и т. д. Чтобы было проще писать регулярные выражения, можно использовать специальные конструкторы или обратиться за помощью к ИИ.
Проверьте работоспособность регулярного выражения, выполнив запрос такого вида:
SELECT <наименование поля>FROM <имя таблицы>WHERE <наименование поля> ~ '<регулярное выражение>';Если у вас есть нетекстовое поле (например, числовое или дата), но вам нужно выполнить проверку с использованием регулярного выражения, то это поле сначала нужно преобразовать в текстовый тип данных. Пример:
SELECT Fld69944FROM Reference787_VT69940WHERE CAST(_Fld69944 AS TEXT) ~ '^(7?\d{10})$';Если выражение написано правильно, вы увидите все строки, попавшие под условие.
После выполненных действий у вас получится примерно такой словарь:
|
Данный словарь взят из конкретного кейса с базой 1С, вы можете взять его за основу. Сохраните его содержимое в файл с расширением .py. Чтобы создать словарь анонимизации на основе мета-словаря, выполните команду:
|
В результате создадутся два словаря: один — с чувствительными конфиденциальными данными, а другой без. Эти словари будут использоваться для обезличивания данных в момент снятия дампа.
Снятие дампа с маскированием и восстановление
Чтобы создать дамп данных с маскированием, выполните команду:
|
После ее запуска начнётся процесс маскирования и создания дампа. Время выполнения зависит от размера БД и объёма чувствительных данных, подлежащих маскированию. После снятия дампа проверьте вывод работы инструмента на наличие ошибок. Чтобы восстановить данные из маскированного дампа, потребуется создать новую БД на целевом хосте. Для этого выполните команду:
|
После восстановления БД обезличивание и анонимизация завершены.
Проверка результата маскирования
Рассмотрим результаты на примере одной записи из таблицы с помощью запроса SELECT:
До маскирования:
|
После маскирования:
|
После тщательной проверки можно передавать обезличенную БД.
Заключение
В статье была рассмотрена opensource-реализация pg_anon — специализированного решения от «Тантор Лабс», предназначенного для автоматизированной анонимизации персональных данных в PostgreSQL. Это эффективный рабочий инструмент для минимизации рисков утечек конфиденциальной информации и обеспечения соответствия требованиям регуляторных стандартов. Как отмечалось ранее, наряду с бесплатной версией существует коммерческая реализация pg_anon с графическим интерфейсом и расширенным функционалом, однако даже базовый opensource-вариант решения предоставляет достаточный набор средств анонимизации для интеграции в процессы разработки и тестирования. Его внедрение позволяет организациям выстроить устойчивую систему защиты данных без значительных инвестиций, что особенно актуально для стартапов и проектов с ограниченными ресурсами.
Habrahabr.ru прочитано 30523 раза
