MaskDump is a powerful tool for database anonymization and data masking designed to protect Personally Identifiable Information (PII) in database dumps. It provides secure PII obfuscation while maintaining data structure and format integrity.
Key features:
- Email and phone number masking with configurable algorithms
- White-list support for preserving specific values
- Caching system for consistent masking across multiple runs
- Regular expression customization for different data formats
- Pipeline-friendly design for integration with existing workflows
Use cases:
- Creating safe development/test environments from production data
- GDPR/CCPA compliance for data sharing
- Database sanitization before analytics processing
- Data masking for non-production environments
- Ensure you have Go installed (version 1.16+ recommended)
- Clone the repository:
git clone https://github.com/yourusername/maskdump.git cd maskdump
- Build the binary:
go build -o maskdump .
mysqldump dbname | ./maskdump --mask-email=light-hash --mask-phone=light-mask > anonymized_dump.sql
Option | Description | Default |
---|---|---|
--mask-email |
Email masking algorithm (light-hash ) |
(disabled) |
--mask-phone |
Phone masking algorithm (light-mask ) |
(disabled) |
--no-cache |
Disable caching of masked values | false |
--config |
Path to configuration file | (autodetect) |
Create maskdump.conf
in the same directory as the binary or specify path with --config
:
{
"cache_path": "/path/to/cache.json",
"email_regex": "\\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\b",
"phone_regex": "(?:\\+7|7|8)?(?:[\\s\\-\\(\\)]*\\d){10}",
"email_white_list": "/path/to/white_list_email.txt",
"phone_white_list": "/path/to/white_list_phone.txt",
"memory_limit_mb": 1024,
"cache_flush_count": 1000
}
Create text files with one value per line to exclude from masking:
white_list_email.txt
example:
white_list_phone.txt
example:
+79001234567
88005553535
- Preserves first character before @ and domain
- Hashes remaining local part with MD5 (first 6 chars of hash)
- Preserves original phone number format
- Replaces specific digits (2,3,5,6,8,10) with SHA256 hash digits
The input is a typical database dump string. The output is the same dump, but with changed email and phone numbers:
$ echo "INSERT INTO users (id, email, phone) VALUES (123, '[email protected]', '+7 (904) 111-22-33'), (124, '[email protected]', '8-900-000-00-00');" | ./maskdump --mask-email=light-hash --mask-phone=light-mask --no-cache
Result:
$ INSERT INTO users (id, email, phone) VALUES (123, '[email protected]', '+7 (154) 101-32-83'), (124, '[email protected]', '8-190-420-50-50');
MaskDump - мощный инструмент для анонимизации баз данных и маскировки информации, предназначенный для защиты персональных данных (PII) в дампах БД. Обеспечивает безопасное преобразование данных с сохранением структуры и формата.
Основные возможности:
- Маскировка email и номеров телефонов с настраиваемыми алгоритмами
- Поддержка белых списков для исключения определённых значений
- Система кэширования для согласованного преобразования
- Настройка регулярных выражений для разных форматов данных
- Интеграция в существующие процессы обработки данных
Применение:
- Создание безопасных сред разработки/тестирования
- Обеспечение соответствия GDPR/CCPA
- Очистка данных перед аналитикой
- Маскировка данных для непродуктивных сред
- Убедитесь, что установлен Go (версия 1.16+)
- Клонируйте репозиторий:
git clone https://github.com/yourusername/maskdump.git cd maskdump
- Соберите бинарник:
go build -o maskdump .
mysqldump dbname | ./maskdump --mask-email=light-hash --mask-phone=light-mask > anonymized_dump.sql
Параметр | Описание | По умолчанию |
---|---|---|
--mask-email |
Алгоритм маскировки email (light-hash ) |
(отключено) |
--mask-phone |
Алгоритм маскировки телефонов (light-mask ) |
(отключено) |
--no-cache |
Отключить кэширование | false |
--config |
Путь к конфигурационному файлу | (автопоиск) |
Создайте maskdump.conf
в той же директории или укажите путь через --config
:
{
"cache_path": "/path/to/cache.json",
"email_regex": "\\b[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}\\b",
"phone_regex": "(?:\\+7|7|8)?(?:[\\s\\-\\(\\)]*\\d){10}",
"email_white_list": "/path/to/white_list_email.txt",
"phone_white_list": "/path/to/white_list_phone.txt",
"memory_limit_mb": 1024,
"cache_flush_count": 1000
}
Создайте текстовые файлы со значениями, которые не нужно маскировать:
Пример white_list_email.txt
:
Пример white_list_phone.txt
:
+79001234567
88005553535
- Сохраняет первый символ и домен
- Хеширует остальную часть с помощью MD5 (первые 6 символов от хэша)
- Сохраняет исходный формат номера
- Заменяет определённые цифры (2,3,5,6,8,10) на цифры из SHA256 хэша
На вход подаём строку типичного дампа базы данных. На выходе получаем этот же дамп, но с изменёнными email и телефонами:
$ echo "INSERT INTO users (id, email, phone) VALUES (123, '[email protected]', '+7 (904) 111-22-33'), (124, '[email protected]', '8-900-000-00-00');" | ./maskdump --mask-email=light-hash --mask-phone=light-mask --no-cache
Результат:
$ INSERT INTO users (id, email, phone) VALUES (123, '[email protected]', '+7 (154) 101-32-83'), (124, '[email protected]', '8-190-420-50-50');