Skip to main content

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') via pgcrypto.
  • 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) via pgcrypto.
  • 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.

Decision tree pour choisir

Voir aussi