1. Sécurité et contrôle d’accès basé sur les rôles (RBAC)

Dans le respect de la nouvelle Loi fédérale sur la protection des données (nLPD) suisse, le principe du moindre privilège impose de restreindre strictement les accès aux seules tables nécessaires à la mission de chaque utilisateur :

-- Création d'un rôle d'application en lecture seule
CREATE ROLE role_analyste_readonly;
GRANT CONNECT ON DATABASE banque_db TO role_analyste_readonly;
GRANT USAGE ON SCHEMA public TO role_analyste_readonly;
GRANT SELECT ON ALL TABLES IN SCHEMA public TO role_analyste_readonly;

-- Attribution du rôle à un utilisateur nominatif
CREATE USER jean_dupont WITH PASSWORD 'M0tDeP@sseComplexe!2026';
GRANT role_analyste_readonly TO jean_dupont;

2. Sécurité au niveau des lignes : Row-Level Security (RLS)

PostgreSQL permet de filtrer automatiquement les lignes retournées par un SELECT en fonction de l’identité de l’utilisateur connecté :

ALTER TABLE dossiers_patients ENABLE ROW LEVEL SECURITY;

CREATE POLICY policy_medecin_traitant ON dossiers_patients
    FOR ALL
    TO role_medecin
    USING (medecin_id = current_user_id());

3. Stratégie de sauvegarde et reprise d’activité (Disaster Recovery)

  • Sauvegarde logique avec pg_dump : Export textuel SQL ou binaire compressé d’un schéma ou d’une base. Idéal pour les petits volumes ou les migrations de versions.
  • Sauvegarde physique en continu avec archivage WAL (Write-Ahead Logging) : Les journaux de transactions sont archivés en temps réel sur un stockage immuable. Combinés à un backup de base périodique (pg_basebackup), ils permettent la restauration à la seconde près avant sinistre : PITR (Point-In-Time Recovery).