Aller au contenu

Modèle de données

Les tables clés sont les suivantes :

  • attributes
  • domains
  • controls
  • measures
  • documents

Rôles : controls = mesures de sécurité (exigences à mettre en œuvre).
measures = instances d'audit (vérifications périodiques de ces exigences).

Dépendances entre tables

Vue d'ensemble : qui utilise quoi.

flowchart LR
    domains -->|"domain_id (1:N)"| controls
    controls -->|"measures[ ] (N:N)"| measures
    measures -->|"controls[ ] (N:N)"| controls
    attributes -.->|"optionnel"| controls
    attributes -.->|"optionnel"| measures
    measures -.->|"next_id (self)"| measures
    documents -.->|"optionnel"| measures

Le schéma détaillé ci-dessous décrit les champs de chaque table.

erDiagram
    domains ||--o{ controls : "domain_id"
    controls }o--o{ measures : "many-to-many"
    attributes }o--o{ controls : "optionnel"
    attributes }o--o{ measures : "optionnel"
    measures o|--o| measures : "next_id"
    documents }o--o| measures : "optionnel"

    domains {
        int id PK
        string framework
        string title
        string description
    }
    attributes {
        int id PK
        string name
        string values
    }
    controls {
        int id PK
        int domain_id FK
        string name
        string clause
        string objective
        array measures
        array attributes
    }
    measures {
        int id PK
        int next_id FK
        string name
        int periodicity
        date plan_date
        date realisation_date
        int status
        array controls
        array attributes
    }
    documents {
        int id PK
        int measure_id FK
    }

Les relations sont les suivantes :

Lien Type Description
domainscontrols Clé étrangère (1:N) Chaque mesure de sécurité référence son domaine via domain_id
controlsmeasures Many-to-many (bidirectionnel) Chaque mesure de sécurité liste ses instances d'audit dans measures[] ; chaque instance d'audit liste ses mesures de sécurité dans controls[]
attributescontrols Optionnel Le champ attributes d'une mesure de sécurité peut contenir une liste d'IDs d'attributs
attributesmeasures Optionnel Idem pour les instances d'audit
measuresmeasures Auto-référence via next_id Permet de chaîner les campagnes successives d'un même audit
documentsmeasures Optionnel (1:N) Les documents et preuves sont attachés aux instances d'audit via measure_id

Note : il n'y a pas de table de jonction exposée pour la relation controls/measures.
Les IDs sont directement embarqués dans chaque objet des deux côtés.


attributes

Les attributs sont des référentiels de classification multi-valeurs.
Chaque attribut définit un ensemble de tags (préfixés #) qui peuvent être associés aux mesures de sécurité et aux instances d'audit.

Champ Type Description
id integer Identifiant unique (PK)
name string Intitulé de la taxonomie (ex : Security measures, Risk_Level)
values string Liste de valeurs possibles séparées par des espaces, chacune préfixée # (ex : #Preventive #Detective #Corrective)
created_at datetime Date de création (ISO 8601, UTC)
updated_at datetime Date de dernière modification

Exemple :

{
  "id": 1,
  "name": "Security measures",
  "values": "#Preventive #Detective #Corrective",
  "created_at": "2026-05-17T20:35:52.000000Z",
  "updated_at": "2026-05-17T20:35:52.000000Z"
}

domains

Les domaines regroupent les mesures de sécurité par thématique.
Chaque domaine appartient à un cadre réglementaire ou méthodologique (framework).

Champ Type Description
id integer Identifiant unique (PK)
framework string Référentiel d'appartenance (ex : NIS2, Vulnerability Management)
title string Nom du domaine (ex : Pilotage et Gouvernance NIS2)
description string Description du périmètre couvert, souvent avec référence à l'article ou à la norme
created_at datetime Date de création
updated_at datetime Date de dernière modification

Exemple :

{
  "id": 1,
  "framework": "NIS2",
  "title": "Pilotage et Gouvernance NIS2",
  "description": "Pilotage stratégique et opérationnel selon Art. 21.1 et 21.2.a",
  "created_at": "2026-05-17T20:35:52.000000Z",
  "updated_at": "2026-05-17T20:35:52.000000Z"
}

controls

Les mesures de sécurité décrivent les exigences à mettre en œuvre.
Chaque mesure de sécurité appartient à un domaine et est vérifiée par une ou plusieurs instances d'audit.

Champ Type Description
id integer Identifiant unique (PK)
domain_id integer Référence vers domains.id (FK, obligatoire)
name string Nom de la mesure, souvent avec le numéro d'article (ex : Art.21.2.a - Analyse de Risques)
clause string Identifiant court de la clause normative (ex : NIS2-Art.21.2.a)
objective string Objectif attendu par cette mesure de sécurité
input string | null Données ou ressources nécessaires à la mise en œuvre
model string | null Modèle ou méthode opérationnelle recommandée
indicator string | null Indicateur de performance structuré (Target, Frequency, Owner)
action_plan string | null Plan d'action ou traitement associé
standard string | null Référence à une norme externe (ex : ISO 27001)
attributes array | null Liste d'IDs d'attributs associés ; null si aucun
measures array Liste des IDs d'instances d'audit qui vérifient cette mesure de sécurité
created_at datetime Date de création
updated_at datetime Date de dernière modification

Exemple :

{
  "id": 1,
  "domain_id": 1,
  "name": "Art.21.2.a - Analyse de Risques",
  "clause": "NIS2-Art.21.2.a",
  "objective": "Évaluation des menaces pesant sur les actifs critiques selon méthodologie EBIOS RM ou équivalent",
  "input": "Liste des actifs critiques, méthodologie EBIOS RM",
  "model": "Analyse annuelle selon ISO 27005 ou EBIOS RM",
  "indicator": "Target: Score résiduel ≤ acceptable | Frequency: Annuel | Owner: RSSI",
  "action_plan": "Plan de traitement des risques validé par Direction",
  "standard": null,
  "attributes": null,
  "measures": [1]
}

measures

Les instances d'audit décrivent les vérifications opérationnelles périodiques.
Une instance d'audit vérifie qu'une ou plusieurs mesures de sécurité sont bien appliquées.
Elle porte les données de planification, de réalisation et de résultat.

Champ Type Description
id integer Identifiant unique (PK)
name string Intitulé de la vérification
objective string | null Objectif spécifique de cette instance d'audit
input string | null Données ou preuves nécessaires à la réalisation
model string | null Mode opératoire de l'audit
action_plan string | null Actions correctives si l'audit échoue
periodicity integer | null Fréquence en mois (ex : 12 = annuel, 3 = trimestriel)
plan_date date | null Date prévue de réalisation (YYYY-MM-DD)
realisation_date date | null Date effective de réalisation
observations string | null Commentaires libres sur le résultat
score number | null Score numérique issu de l'évaluation ; null si non réalisé
note number | null Note qualitative complémentaire
status integer État courant de l'instance d'audit (voir ci-dessous)
next_id integer | null ID de l'instance suivante dans la chaîne historique (FK self)
standard string | null Référence normative externe
attributes array | null Liste d'IDs d'attributs associés ; null si aucun
scope string | null Périmètre d'application (entité, site, système)
controls array Liste des IDs de mesures de sécurité vérifiées par cette instance d'audit
created_at datetime Date de création
updated_at datetime Date de dernière modification

Valeurs du champ status

Valeur Signification
0 À réaliser / Non planifié (realisation_date est null)
1 Proposé (l'audité a soumis un résultat, en attente de validation)
2 Réalisé / Terminé (realisation_date est renseignée)

Exemple :

{
  "id": 1,
  "name": "Revue et signature formelle de l'analyse de risques",
  "objective": "Validation par la direction de la stratégie de traitement des risques",
  "model": "Présentation Codir + signature formelle",
  "periodicity": 12,
  "plan_date": "2026-07-31",
  "realisation_date": "2025-03-25",
  "score": null,
  "status": 2,
  "next_id": null,
  "standard": null,
  "attributes": null,
  "scope": null,
  "controls": [1]
}

documents

La table documents stocke les pièces jointes et preuves documentaires associées aux instances d'audit.
Chaque document est lié à un enregistrement measures via measure_id.