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
1. Two Operation Modes:
- Full File Processing - works with any text files (SQL dumps, CSV, logs, etc.)
- Selective Processing - masks only specified tables and fields (configured in
processing_tables
)
2. Table Exclusion
The skip_insert_into_table_list
parameter skips inserts into specified tables (e.g., logs or system data).
3. Email & Phone Whitelist
Settings email_white_list
and phone_white_list
preserve specific emails and numbers from masking.
4. Flexible Masking Rules
- Partial email masking (e.g.,
[email protected]
βus****@domain.com
) - Phone number obfuscation (e.g.,
+7 (123) 456-78-90
β+7 (***) ***-**-90
)
You can download a ready-to-use maskdump
binary from the Releases page
- 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,
"skip_insert_into_table_list": "/path/to/skip_table_list.txt",
"masking": {
"email": {
"target": "username:2-",
"value": "hash:6"
},
"phone": {
"target": "2,3,5,6,8,10",
"value": "hash"
}
},
"processing_tables": {
"b_user": {
"email": ["LOGIN", "EMAIL"],
"phone": ["PERSONAL_PHONE", "PERSONAL_MOBILE", "WORK_PHONE"]
},
"b_socialservices_user": {
"email": ["EMAIL"]
}
}
}
Create text files with one value per line to exclude from masking:
white_list_email.txt
example:
white_list_phone.txt
example:
+79001234567
88005553535
- The characters to be replaced depend on the settings. By default, the configuration preserves only the first character and the domain, while all other characters in the email username are replaced with the first 6 characters of the MD5 hash of the entire original email string.
- Possible email masking configuration options:
target="2-5"
andvalue="hash"
- Numbers separated by a hyphen indicate character positions to replace; "hash" means replacement with characters from the MD5 hash of the original email. The range can be open-ended: "2-" replaces the second and all subsequent characters; "-5" replaces only the first five characters in the email.target="1~1"
andvalue="hash"
- Numbers separated by a tilde indicate how many characters to keep unchanged at the start and end of the string (all others are replaced); "hash" means replacement with characters from the MD5 hash of the original email. The range can be open-ended: "2~" keeps the first and second characters unchanged, replacing all subsequent characters; "~1" replaces all characters except the last one.target="1,3,5,7"
andvalue="hash"
- Comma-separated numbers indicate specific character positions to change; "hash" means replacement with characters from the MD5 hash of the original email.- Target can include modifiers: "username:" - modify only the left part of the email (before @) and "domain:" - modify only the right part of the email (after @). For example,
target="username:2-"
means replacing the second and all subsequent characters in the left part of the email, while everything else (first character, @ symbol, and right part of the email) remains unchanged. value="*"
- means replacement with asterisk characters
- Preserves the original phone number format
- Replaces specific digits with digits from the SHA256 hash. Which digits get replaced is determined by settings. By default, digits at these positions are replaced: 2, 3, 5, 6, 8, and 10.
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 (354) 101-72-53'), (124, '[email protected]', '8-700-160-90-20');
Example of working together with the mysqldump utility:
mysqldump --user=admin -p --host=localhost db_name | ./maskdump --mask-email=light-hash --mask-phone=light-mask >/tmp/maskdata_db_name.sql
./maskdump --mask-email=light-hash --mask-phone=light-mask <~/tmp/dump_db_name.sql >/tmp/maskdata_db_data.sql
MaskDump - ΠΌΠΎΡΠ½ΡΠΉ ΠΈΠ½ΡΡΡΡΠΌΠ΅Π½Ρ Π΄Π»Ρ Π°Π½ΠΎΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π±Π°Π· Π΄Π°Π½Π½ΡΡ ΠΈ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΠΈ, ΠΏΡΠ΅Π΄Π½Π°Π·Π½Π°ΡΠ΅Π½Π½ΡΠΉ Π΄Π»Ρ Π·Π°ΡΠΈΡΡ ΠΏΠ΅ΡΡΠΎΠ½Π°Π»ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ (PII) Π² Π΄Π°ΠΌΠΏΠ°Ρ ΠΠ. ΠΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ΅ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Ρ ΡΠΎΡ ΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ ΡΡΡΡΠΊΡΡΡΡ ΠΈ ΡΠΎΡΠΌΠ°ΡΠ°.
ΠΡΠ½ΠΎΠ²Π½ΡΠ΅ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΠΈ:
- ΠΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ° email ΠΈ Π½ΠΎΠΌΠ΅ΡΠΎΠ² ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΎΠ² Ρ Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΠΌΡΠΌΠΈ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°ΠΌΠΈ
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±Π΅Π»ΡΡ ΡΠΏΠΈΡΠΊΠΎΠ² Π΄Π»Ρ ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΠΉ
- Π‘ΠΈΡΡΠ΅ΠΌΠ° ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π΄Π»Ρ ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ ΠΏΡΠ΅ΠΎΠ±ΡΠ°Π·ΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ°ΡΡΡΠΎΠΉΠΊΠ° ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ Π΄Π»Ρ ΡΠ°Π·Π½ΡΡ ΡΠΎΡΠΌΠ°ΡΠΎΠ² Π΄Π°Π½Π½ΡΡ
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π΄Π°Π½Π½ΡΡ
ΠΡΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅:
- Π‘ΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ/ΡΠ΅ΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ
- ΠΠ±Π΅ΡΠΏΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΠΈΡ GDPR/CCPA
- ΠΡΠΈΡΡΠΊΠ° Π΄Π°Π½Π½ΡΡ ΠΏΠ΅ΡΠ΅Π΄ Π°Π½Π°Π»ΠΈΡΠΈΠΊΠΎΠΉ
- ΠΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΄Π°Π½Π½ΡΡ Π΄Π»Ρ Π½Π΅ΠΏΡΠΎΠ΄ΡΠΊΡΠΈΠ²Π½ΡΡ ΡΡΠ΅Π΄
1. ΠΠ²Π° ΡΠ΅ΠΆΠΈΠΌΠ° ΡΠ°Π±ΠΎΡΡ:
- ΠΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΡΠ΅Π³ΠΎ ΡΠ°ΠΉΠ»Π° - ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΡ Π΄Π»Ρ Π»ΡΠ±ΡΡ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΡ ΡΠ°ΠΉΠ»ΠΎΠ² (SQL-Π΄Π°ΠΌΠΏΡ, CSV, Π»ΠΎΠ³ΠΈ ΠΈ Π΄Ρ.)
- ΠΡΠ±ΠΎΡΠΎΡΠ½Π°Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° - ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠΎΠ»ΡΠΊΠΎ ΡΠΊΠ°Π·Π°Π½Π½ΡΡ
ΡΠ°Π±Π»ΠΈΡ ΠΈ ΠΏΠΎΠ»Π΅ΠΉ (Π½Π°ΡΡΡΠ°ΠΈΠ²Π°Π΅ΡΡΡ Π² Π°ΡΡΠΈΠ±ΡΡΠ΅
processing_tables
ΠΊΠΎΠ½ΡΠΈΠ³Π°)
2. ΠΡΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅ ΡΠ°Π±Π»ΠΈΡ ΠΈΠ· ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ
ΠΠ°ΡΠ°ΠΌΠ΅ΡΡ skip_insert_into_table_list
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΏΡΠΎΠΏΡΡΠΊΠ°ΡΡ Π²ΡΡΠ°Π²ΠΊΠΈ Π² Π·Π°Π΄Π°Π½Π½ΡΠ΅ ΡΠ°Π±Π»ΠΈΡΡ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, Π»ΠΎΠ³ΠΈ ΠΈΠ»ΠΈ ΡΠ»ΡΠΆΠ΅Π±Π½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅).
3. ΠΠ΅Π»ΡΠΉ ΡΠΏΠΈΡΠΎΠΊ email ΠΈ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΎΠ²
ΠΠ°ΡΡΡΠΎΠΉΠΊΠΈ email_white_list
ΠΈ phone_white_list
ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡ ΡΠΎΡ
ΡΠ°Π½ΠΈΡΡ Π½Π΅ΡΡΠΎΠ½ΡΡΡΠΌΠΈ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π°Π΄ΡΠ΅ΡΠ° ΠΈ Π½ΠΎΠΌΠ΅ΡΠ°.
4. ΠΠΈΠ±ΠΊΠΈΠ΅ ΠΏΡΠ°Π²ΠΈΠ»Π° ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²ΠΊΠΈ
- ΠΠ°ΠΌΠ΅Π½Π° ΡΠ°ΡΡΠΈ email (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
[email protected]
βus****@domain.com
) - Π§Π°ΡΡΠΈΡΠ½ΠΎΠ΅ ΡΠΊΡΡΡΠΈΠ΅ ΡΠ΅Π»Π΅ΡΠΎΠ½ΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ,
+7 (123) 456-78-90
β+7 (***) ***-**-90
)
ΠΠΎΠΆΠ½ΠΎ ΡΠΊΠ°ΡΠ°ΡΡ Π³ΠΎΡΠΎΠ²ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ maskdump
ΡΠΎ ΡΡΡΠ°Π½ΠΈΡΡ ΡΠ΅Π»ΠΈΠ·ΠΎΠ²
- Π£Π±Π΅Π΄ΠΈΡΠ΅ΡΡ, ΡΡΠΎ ΡΡΡΠ°Π½ΠΎΠ²Π»Π΅Π½ 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,
"skip_insert_into_table_list": "/path/to/skip_table_list.txt",
"masking": {
"email": {
"target": "username:2-",
"value": "hash:6"
},
"phone": {
"target": "2,3,5,6,8,10",
"value": "hash"
}
},
"processing_tables": {
"b_user": {
"email": ["LOGIN", "EMAIL"],
"phone": ["PERSONAL_PHONE", "PERSONAL_MOBILE", "WORK_PHONE"]
},
"b_socialservices_user": {
"email": ["EMAIL"]
}
}
}
Π‘ΠΎΠ·Π΄Π°ΠΉΡΠ΅ ΡΠ΅ΠΊΡΡΠΎΠ²ΡΠ΅ ΡΠ°ΠΉΠ»Ρ ΡΠΎ Π·Π½Π°ΡΠ΅Π½ΠΈΡΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°ΡΡ:
ΠΡΠΈΠΌΠ΅Ρ white_list_email.txt
:
ΠΡΠΈΠΌΠ΅Ρ white_list_phone.txt
:
+79001234567
88005553535
- ΠΠ°ΠΌΠ΅Π½ΡΠ΅ΠΌΡΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ. ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ Π·Π°Π΄Π°Π½Ρ Π½Π°ΡΡΡΠΎΠΉΠΊΠΈ, ΠΏΡΠΈ ΠΊΠΎΡΠΎΡΡΡ ΡΠΎΡ ΡΠ°Π½ΡΠ΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΈ Π΄ΠΎΠΌΠ΅Π½, Π° Π²ΡΠ΅ ΠΏΡΠΎΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ ΠΈΠΌΠ΅Π½ΠΈ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΈΠ· email Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ Π½Π° ΠΏΠ΅ΡΠ²ΡΠ΅ 6 ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² MD5 Ρ ΡΡΠ° ΠΎΡ Π²ΡΠ΅ΠΉ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΡΡΡΠΎΠΊΠΈ email
- ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ Π½Π°ΡΡΡΠΎΠ΅ΠΊ ΠΌΠ°ΠΊΠΈΡΠΎΠ²ΠΊΠΈ email:
target="2-5"
ΠΈvalue="hash"
β ΡΠΈΡΠ»Π° ΡΠ΅ΡΠ΅Π· Π΄Π΅ΡΠΈΡ β ΡΡΠΎ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ; "hash" β ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΈΠ· MD5 Ρ ΡΡΠ° ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ email. ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌΡΡ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ: "2-" β Π·Π°ΠΌΠ΅Π½Π° Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΈ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΈΠΌΠΎΠ»ΠΎΠ²; "-5" β Π·Π°ΠΌΠ΅Π½Π° ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠ΅ΡΠ²ΡΡ ΠΏΡΡΠΈ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π² email.target="1~1"
ΠΈvalue="hash"
β ΡΠΈΡΠ»Π° ΡΠ΅ΡΠ΅Π· ΡΠΈΠ»ΡΠ΄Ρ β ΡΡΠΎ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΡΠ°Π²Π»ΡΠ΅ΠΌ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌΠΈ Ρ Π½Π°ΡΠ°Π»Π° ΠΈ Ρ ΠΊΠΎΠ½ΡΠ° ΡΡΡΠΎΠΊΠΈ (Π° Π²ΡΠ΅ ΠΏΡΠΎΡΠΈΠ΅ Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ); "hash" β ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΈΠ· MD5 Ρ ΡΡΠ° ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ email. ΠΠΈΠ°ΠΏΠ°Π·ΠΎΠ½ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΠΎΡΠΊΡΡΡΡΠΌ: "2~" β ΠΏΠ΅ΡΠ²ΡΠΉ ΠΈ Π²ΡΠΎΡΠΎΠΉ ΡΠΈΠΌΠ²ΠΎΠ» ΠΎΡΡΠ°ΡΡΡΡ, Π² Π²ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠΈΠΌΠ²ΠΎΠ»Ρ Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ; "~1" β Π·Π°ΠΌΠ΅Π½Π° Π²ΡΠ΅Ρ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΡΠΎΠΌΠ΅ ΠΏΠΎΡΠ»Π΅Π΄Π½Π΅Π³ΠΎ.target="1,3,5,7"
ΠΈvalue="hash"
β ΡΠΈΡΠ»Π° ΡΠ΅ΡΠ΅Π· Π·Π°ΠΏΡΡΡΡ β ΡΡΠΎ Π½ΠΎΠΌΠ΅ΡΠ° ΠΏΠΎΠΈΡΠΈΠΉ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠΌ; "hash" β ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π·Π°ΠΌΠ΅Π½ΡΠ΅ΠΌ ΡΠΈΠΌΠ²ΠΎΠ»Π°ΠΌΠΈ ΠΈΠ· MD5 Ρ ΡΡΠ° ΠΎΡ ΠΈΡΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ email.- Π΄Π»Ρ target ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ ΠΌΠΎΠ΄ΠΈΡΠΈΠΊΠ°ΡΠΎΡΡ: "username:" β ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π»Π΅Π²ΡΡ ΡΠ°ΡΡΡ email ΠΈ "domain:" β ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠ°Π²ΡΡ ΡΠ°ΡΡΡ email. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ,
target="username:2-"
ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π·Π°ΠΌΠ΅Π½Ρ Π²ΡΠΎΡΠΎΠ³ΠΎ ΠΈ Π²ΡΠ΅Ρ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΡΠΈΡ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² Π»Π΅Π²ΠΎΠΉ ΡΠ°ΡΡΠΈ email, Π° Π²ΡΡ ΠΎΡΡΠ°Π»ΡΠ½ΠΎΠ΅ (ΠΏΠ΅ΡΠ²ΡΠΉ ΡΠΈΠΌΠ²ΠΎΠ», Π·Π½Π°ΠΊ "@" ΠΈ ΠΏΡΠ°Π²Π°Ρ ΡΠ°ΡΡΡ email) ΠΎΡΡΠ°ΡΡΡΡ Π½Π΅ΠΈΠ·ΠΌΠ΅Π½Π½ΡΠΌ value="*"
β ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ Π·Π°ΠΌΠ΅Π½Ρ Π½Π° ΡΠΈΠΌΠ²ΠΎΠ» Π·Π²ΡΠ·Π΄ΠΎΡΠΊΠΈ
- Π‘ΠΎΡ ΡΠ°Π½ΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΠΉ ΡΠΎΡΠΌΠ°Ρ Π½ΠΎΠΌΠ΅ΡΠ°
- ΠΠ°ΠΌΠ΅Π½ΡΠ΅Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΡΠ΅ ΡΠΈΡΡΡ Π½Π° ΡΠΈΡΡΡ ΠΈΠ· SHA256 Ρ ΡΡΠ°. Π§ΡΠΎ ΠΏΠΎΠΏΠ°Π΄Π°Π΅Ρ ΠΏΠΎΠ΄ Π·Π°ΠΌΠ΅Π½Ρ β ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ΅ΡΡΡ Π½Π°ΡΡΡΠΎΠΉΠΊΠ°ΠΌΠΈ. ΠΠΎ-ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ, Π·Π°ΠΌΠ΅Π½ΡΡΡΡΡ ΡΠΈΡΡΡ Π½Π° ΡΡΠΈΡ Π½ΠΎΠΌΠ΅ΡΠ°Ρ ΠΏΠΎΠ·ΠΈΡΠΈΠΉ: 2, 3, 5, 6, 8 ΠΈ 10.
ΠΠ° Π²Ρ ΠΎΠ΄ ΠΏΠΎΠ΄Π°ΡΠΌ ΡΡΡΠΎΠΊΡ ΡΠΈΠΏΠΈΡΠ½ΠΎΠ³ΠΎ Π΄Π°ΠΌΠΏΠ° Π±Π°Π·Ρ Π΄Π°Π½Π½ΡΡ . ΠΠ° Π²ΡΡ ΠΎΠ΄Π΅ ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΡΠΎΡ ΠΆΠ΅ Π΄Π°ΠΌΠΏ, Π½ΠΎ Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΠ½Π½ΡΠΌΠΈ 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 (354) 101-72-53'), (124, '[email protected]', '8-700-160-90-20');
ΠΡΠΈΠΌΠ΅Ρ ΡΠΎΠ²ΠΌΠ΅ΡΡΠ½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠ»ΠΈΡΠΎΠΉ mysqldump:
mysqldump --user=admin -p --host=localhost db_name | ./maskdump --mask-email=light-hash --mask-phone=light-mask >/tmp/maskdata_db_name.sql
./maskdump --mask-email=light-hash --mask-phone=light-mask <~/tmp/dump_db_name.sql >/tmp/maskdata_db_data.sql