Validation du Schéma de Base de Données¶
Ce document décrit le processus de validation du schéma de base de données après l'exécution des migrations TypeORM.
Objectif¶
Le script de validation garantit que : 1. Tous les schemas PostgreSQL attendus existent 2. Toutes les tables avec leurs colonnes sont présentes 3. Tous les index requis sont créés 4. Tous les triggers sont actifs 5. Toutes les policies RLS sont en place
Usage¶
En local¶
En CI/CD (après migrate:dev)¶
Fichier de configuration¶
Le schéma attendu est défini dans src/database/schema-validator.ts via l'objet EXPECTED_SCHEMA.
Structure du schéma attendu¶
interface SchemaExpectation {
schemas: string[]; // Schemas PostgreSQL
tables: TableExpectation[]; // Tables avec colonnes
indexes: IndexExpectation[]; // Index (BTREE, GIN, UNIQUE)
triggers: TriggerExpectation[]; // Triggers
rlsPolicies: RlsPolicyExpectation[]; // Policies RLS
}
Ajouter une nouvelle migration¶
Lors de la création d'une nouvelle migration, il faut :
- Mettre à jour
schema-validator.tsavec les nouveaux objets créés - Référencer le ticket (PD-XX) pour traçabilité
Exemple : Ajout d'une nouvelle table¶
// Dans EXPECTED_SCHEMA.tables
{
schema: 'vault_secure',
name: 'ma_nouvelle_table',
columns: ['id', 'user_id', 'data', 'created_at'],
migration: 'PD-XX',
}
// Dans EXPECTED_SCHEMA.indexes
{
schema: 'vault_secure',
table: 'ma_nouvelle_table',
name: 'idx_ma_nouvelle_table_user_id',
migration: 'PD-XX',
}
Comportement en cas d'erreur¶
| Type d'objet | Niveau | Action |
|---|---|---|
| Schema manquant | ERROR | Exit code 1 |
| Table manquante | ERROR | Exit code 1 |
| Colonne manquante | ERROR | Exit code 1 |
| Index manquant | WARNING | Log uniquement |
| Trigger manquant | ERROR | Exit code 1 |
| Policy RLS manquante | ERROR | Exit code 1 |
Les index sont en WARNING car ils n'empêchent pas le fonctionnement (mais dégradent les performances).
Schéma actuel¶
Schemas¶
audit- Logs d'audit (PD-14)vault_secure- Données sensibles isolées (PD-35)
Tables principales¶
| Schema | Table | Migration | Description |
|---|---|---|---|
| audit | events | PD-14 | Journal d'audit |
| vault_secure | users | PD-15 | Utilisateurs SRP-6a |
| vault_secure | documents | PD-16 | Documents chiffrés |
| vault_secure | key_envelopes | PD-35 | Enveloppes de clés |
| vault_secure | device_blacklist | PD-35 | Devices révoqués |
| public | documents | PD-38 | Table legacy avec hash_doc |
Policies RLS¶
Toutes les tables vault_secure ont des policies RLS basées sur current_setting('app.current_user_id').
Intégration CI/CD¶
Dans .gitlab-ci.yml, ajouter après le job de migration :
Maintenance¶
- Mettre à jour
EXPECTED_SCHEMAà chaque nouvelle migration - Exécuter
npm run migration:validateen local avant de pusher - Le script échoue (exit 1) si des objets critiques manquent