Anonymization strategies (architecture)
Detail interne des six strategies, dispatching, fallback Python et generation SQL natif par dialecte.
Strategies et dialectes
Dispatcher
anonymization_strategies/dispatcher.py route vers l'implementation par
dialecte. Si le dialecte ne supporte pas la strategy nativement, fallback
Python streaming par batch (5000 lignes par defaut).
Detail par strategy
hash
- PG :
digest(value || salt, 'sha256')viapgcrypto. - MySQL :
SHA2(CONCAT(value, salt), 256). - MariaDB : idem MySQL.
- MSSQL :
HASHBYTES('SHA2_256', value + salt). - SQLite : pas de SHA2 natif, fallback Python.
Idempotent (meme value + salt -> meme hash). FK-safe si meme salt partage.
redact
UPDATE col = '***' ou NULL. Trivial, supporte par tous les dialectes.
Attention : sur une FK, casse les jointures (toutes les valeurs deviennent
identiques).
fake
Utilise la lib Python Faker. Genere un nom / email / addr realiste par row.
Tournant en Python (pas SQL natif), batch 5000 rows. Lent sur grosses tables
(>1M rows = plusieurs heures).
Salt-based : pour FK consistency, Faker est seede avec
hash(value + salt) -> meme value source = meme valeur fake.
generalize
Tronque ou groupe :
- Date -> mois (
DATE_TRUNC('month', col)PG,DATE_FORMAT(col, '%Y-%m-01')MySQL). - ZIP code -> 3 premiers chars.
- Numerique -> bucket (par tranches).
SQL natif partout sauf cas tres custom.
shuffle
Permutation au sein de la colonne. Implementation : table temporaire avec
nouvel ordre random, puis UPDATE ... FROM (PG / MSSQL) ou hack via
sub-query (MySQL).
Casse FK / PK : la valeur 42 part sur une autre ligne. Reservee aux colonnes ni FK ni PK.
encrypt
- PG :
pgp_sym_encrypt(value, key)viapgcrypto. - MSSQL :
EncryptByKey(KEY_GUID('...'), value)— demande config Key Hierarchy en amont. - Autres : Python AES-GCM avec cle depuis
SecretProvider.
Non-deterministe : meme value source -> ciphertexts differents. Pas FK-safe.