Aller au contenu
For the complete DHIS2 documentation index, see llms.txt.

Audit

Introduction

DHIS2 prend en charge un nouveau service d'audit basé sur Apache ActiveMQ Artemis. Artemis est utilisé comme système de messagerie asynchrone par DHIS2.

Une fois qu'une entité est enregistrée dans la base de données, un message d'audit sera généré et envoyé au service utilisateur de la messagerie Artemis. Le message sera ensuite traité dans un autre fil de discussion.

Les journaux d'audit peuvent être récupérés à partir de la base de données de DHIS2. Actuellement, aucun point d'extrémité d'une interface utilisateur ou d'une API n’est disponible pour récupérer les entrées d’audit.

Vous trouverez une explication détaillée de l'architecture du système d'audit ici.

Ce que nous enregistrons

Voici la liste des opérations que nous enregistrons dans le cadre du système d'audit :

  • Opérations sur les comptes d'utilisateurs (par exemple, mais sans s'y limiter, la création, les modifications de profil)
  • Opérations sur les rôles d'utilisateurs, les groupes et les groupes d'autorités
  • Opérations sur les objets de métadonnées (par exemple, mais sans s'y limiter, les catégories, les unités d'organisation, les rapports)
  • Operations on tracked objects (like but not limited to tracked entities)
  • Configuration des tâches
  • Opérations "Briser le verre"

Single Audit table

Toutes les entrées d'audit, à l'exception de celles liées aux entités suivies, seront sauvegardées dans un même tableau nommée audit

Colonne Type Description
identifiant de l'audit entier Clé primaire.
type d'audit text LIRE, CRÉER, METTRE À JOUR, SUPPRIMER, RECHERCHER
portée de l'audit text MÉTADONNÉES, AGRÉGÉ, TRACKER
klass text Nom de classe Java de l’entité d’audit.
attributs jsonb Une chaîne JSON avec les attributs de l'objet audité. Exemple : {"valueType": "TEXT", "categoryCombo": "SWQW313FQY", "domainType": "TRACKER"}.
données bytea Chaîne JSON compressée de l'entité d'audit au format "tableau d'octets" (non lisible par l'homme).
créé à horodatage sans fuseau horaire Temps de création.
créé par text Nom d'utilisateur de l'utilisateur effectuant l'opération auditée.
uid text L'UID de l'objet audité.
code text Le code de l'objet audité.

The audit service makes use of two new concepts: Audit Scope and Audit Type.

Audit Scope

Une portée d'audit est une zone logique de l'application qui peut être auditée. Il existe actuellement trois portée d'audit.

Portée Clé Objets audités
Tracker TRACKER Tracked Entity, Enrollment, Event.
Métadonnées MÉTADONNÉES Tous les objets de métadonnées (par exemple, les éléments de données, les unités d'organisation).
Agrégées AGRÉGÉ Valeur de données agrégée.

Audit Type

Un type d'audit est une action qui déclenche une opération d'audit. Actuellement, nous prenons en charge les quatre types suivants.

Nom Clé Description
Lire LIRE L'objet a été lu.
Créer CREATE L'objet a été créé.
Mettre à jour METTRE À JOUR L'objet a été mis à jour.
Supprimer SUPPRIMER L'objet a été supprimé.
Désactivé DÉSACTIVÉ Désactiver l'audit.

Attention

Le type d'audit LIRE peut générer beaucoup de données dans la base de données et avoir un impact sur les performances.

Audits d'entités suivies

Operations on tracked entities are stored in the trackedentityaudit table.

trackedentityaudit

Colonne Type Description
trackedentityauditid entier Clé primaire.
trackedentity text Tracked entity name.
created horodatage sans fuseau horaire Temps de création.
accessible par text Nom d'utilisateur de l'utilisateur effectuant l'opération auditée.
type d'audit text LIRE, CRÉER, METTRE À JOUR, SUPPRIMER, RECHERCHER
commentaire text Le code de l'objet audité.

This data can be retrieved via the API.

Briser le verre

Les fonctionnalités "Briser le verre" permettent d'accéder aux enregistrements auxquels un utilisateur de DHIS2 n'a pas accès dans des circonstances particulières. En conséquence, les utilisateurs doivent fournir par écrit une raison pour justifier leur accès à ces enregistrements.

Vous trouverez une vidéo explicative sur notre chaîne Youtube ici.

L'événement "briser le verre" est stocké dans le tableau programtempownershipaudit, présenté ci-dessous :

Colonne Type Description
programtempownershipauditid entier Clé primaire.
Id du programme entier ID du programme auquel appartient l’entité suivie.
trackedentityid entier Tracked entity ID of which the attribute value belongs to.
created horodatage sans fuseau horaire Temps de création.
accessible par text Nom d'utilisateur de l'utilisateur effectuant l'opération auditée.
raison text La raison telle qu'insérée dans la boîte de dialogue.

Setup

Le système d'audit est activé par défaut pour les portées et types suivants.

Scopes (case sensitive):

  • READ
  • CRÉER
  • METTRE À JOUR
  • SUPPRIMER
  • RECHERCHE
  • DÉSACTIVÉ

Types :

  • MÉTADONNÉES
  • TRACKER
  • AGRÉGÉ

Cela signifie qu'aucune action n'est requise pour activer le système d'audit par défaut. Le paramètre par défaut équivaut à la configuration dhis.conf suivante.

audit.metadata = CRÉER; METTRE À JOUR; SUPPRIMER
audit.tracker = CRÉER; METTRE À JOUR; SUPPRIMER
audit.aggregate = CRÉER; METTRE À JOUR; SUPPRIMER

L'audit peut être configuré à l'aide du référentiel d'audit. Le référentiel d'audit représente les combinaisons valides de portées et de types, et est défini avec les propriétés suivantes dans le fichier de configuration dhis.conf. Chaque propriété accepte une liste de types d'audit délimitée par un point-virgule (;).

  • audit.metadata
  • audit.tracker
  • audit.aggregate

Artemis

[Apache ActiveMQ Artemis] (https://activemq.apache.org/components/artemis/documentation/) est un projet open source qui vise à développer un système de messagerie asynchrone multi-protocoles, intégrable, très performant et en grappe. Il figure dans DHIS2 depuis la version 2.31 et est utilisé comme système de consommation des journaux d'audit.

Par défaut, DHIS2 démarrera un serveur Artemis intégré, qui est utilisé en interne par l'application pour stocker et accéder aux événements d'audit.

Cependant, si vous disposez déjà d'un serveur Artemis, vous pouvez vous y connecter depuis DHIS2 pour envoyer des événements d'audit, tel que décrit dans notre documentation officielle : dans cette configuration, les événements d'audit circuleront de DHIS2 vers le système Artemis externe.

log4j2

log4j2 est la bibliothèque de journalisation de DHIS2 par défaut, utilisée pour gérer les messages de sorties. Elle est utilisée pour contrôler quels événements sont enregistrés dans quel fichier.

L'application fournit un [fichier de configuration par défaut de log4j2] (https://github.com/dhis2/dhis2-core/blob/master/dhis-2/dhis-web/dhis-web-commons-resources/src/main/webapp/WEB-INF/classes/log4j2.xml), qui indique quelles informations doivent être enregistrées et où (console). DHIS2 se charge ensuite d'importer ce fichier et de journaliser les instructions, tel que décrit dans la classe de configuration log4j, c'est-à-dire qu'il redirige la sortie de la console vers les fichiers.

De la version 2.36 à la version 2.38, le fichier journal d'audit dhis-audit.log fait l'objet d'une rotation tous les jours à minuit.

Vous trouverez un exemple de configuration personnalisée de log4j2 ici : l'exemple montre comment configurer DHIS2 pour qu'il enregistre tous les journaux dans un dispositif de stockage externe, effectue une rotation hebdomadaire et les conserve pendant 30 jours. Veuillez lire la section sur la journalisation des applications pour savoir comment utiliser cette fonction.

Exemples

Cette section montre comment configurer le système d'audit dans dhis.conf.

Pour activer l'audit de création et de mise à jour des métadonnées et du tracker uniquement :

audit.metadata = CREATE;UPDATE
audit.tracker = CREATE;UPDATE
audit.aggregate = DISABLED

Pour auditer uniquement les objets liés au tracker "créer" et "supprimer" :

audit.metadata = DISABLED
audit.tracker = CREATE;DELETE
audit.aggregate = DISABLED

Pour désactiver complètement l'audit pour toutes les portées :

audit.metadata = DISABLED
audit.tracker = DISABLED
audit.aggregate = DISABLED

Nous recommandons de conserver les pistes d'audit dans un fichier, comme c'est le cas par défaut dans la version 2.38. Pour les versions plus anciennes, la configuration suivante enregistre les journaux d'audit dans le fichier $DHIS2_HOME/logs/dhis-audit.log :

audit.database = off
audit.logger = on

Pour stocker les données d'audit dans la base de données, ajoutez ce qui suit à votre fichier dhis.conf (par défaut jusqu'à la version 2.38) :

audit.database = on
audit.logger = off

Pour extraire les journaux du tableau audit, vous pouvez utiliser dhis2-audit-data-extractor à partir du système sur lequel DHIS2 fonctionne :

$ python extract_audit.py extract

Veuillez lire la documentation pour plus de détails.

Pour analyser les entrées du fichier journal, vous pouvez utiliser le script python suivant :

$ grep "auditType" dhis-audit.log | python extract_audit.py parse

Ou utilisez jq comme suit :

$ grep "auditType" dhis-audit.log | jq -r .

Pour sélectionner des événements à une date spécifique, vous pouvez utiliser jq comme suit (dans cet exemple, nous sélectionnons tous les événements survenus entre janvier 2022 et fin juin 2022) :

$ grep "auditType" dhis-audit.log | jq -r '.[] | select ( (.datetime >="2022-01-01") and (.datetime <= "2022-06-30") )'

Idem avec extract_audit :

$ python3 extract_audit.py extract -m stdout -f JSON | jq -r '.[] | select ( (.datetime >="2022-01-01") and (.datetime <= "2022-06-30") )'