Module d'extension d'audit MySQL Enterprise

Le module d'extension Audit MySQL Enterprise permet à MySQL Server de produire un fichier journal contenant un enregistrement d'audit de l'activité du serveur. Le contenu du journal inclut le moment où les clients se connectent et se déconnectent, ainsi que les actions qu'ils effectuent lorsqu'ils sont connectés, telles que les bases de données et les tables auxquelles ils accèdent.

Vous pouvez ajouter des statistiques pour l'heure et la taille de chaque requête afin de détecter les valeurs aberrantes. Par défaut, les journaux de module d'extension d'audit sont désactivés et vous devez définir des filtres de module d'extension d'audit pour activer la journalisation des événements auditables pour tous les utilisateurs ou pour des utilisateurs spécifiques.

Rubriques connexes

Accorder des privilèges d'administration d'audit

Par défaut, l'administrateur HeatWave que vous avez défini lors de la création du système de base de données dispose du privilège AUDIT_ADMIN. Vous pouvez accorder des privilèges d'administration d'audit à davantage d'utilisateurs.

Utilisation d'un client de ligne de commande

Utilisez un client de ligne de commande tel que le client MySQL ou le shell MySQL pour accorder des privilèges d'administration d'audit à davantage d'utilisateurs.

  1. Connectez le système de base de données à l'aide du client de ligne de commande de votre choix.
  2. Exécutez la commande suivante pour accorder à l'utilisateur, User001, le privilège d'administration d'audit :
    GRANT AUDIT_ADMIN ON *.* TO <User001>;

Définir des filtres de plug-in d'audit

Vous devez définir des filtres de module d'extension d'audit pour activer la journalisation des événements auditables pour tous les utilisateurs ou pour des utilisateurs spécifiques. Par défaut, les journaux de module d'extension d'audit sont désactivés.

Utilisation d'un client de ligne de commande

Utilisez un client de ligne de commande tel que le client MySQL ou le shell MySQL pour définir des filtres de module d'extension d'audit afin d'activer la journalisation des événements auditables pour tous les utilisateurs ou pour des utilisateurs spécifiques.

Cette tâche requiert les éléments suivants :
  • MySQL version 8.0.34-u2 ou supérieure.
  1. Connectez le système de base de données à l'aide du client de ligne de commande de votre choix.
  2. Définissez des filtres d'audit pour activer la journalisation. Reportez-vous à la section Writing Audit Log Filter Definitions.
    1. Pour auditer tous les événements, exécutez la commande suivante :
      SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
    2. Pour auditer uniquement les événements de connexion, exécutez la commande suivante :
      SELECT audit_log_filter_set_filter('log_conn_events','{ "filter": { "class": { "name": "connection" } } }');
    3. Pour afficher les filtres d'audit, exécutez la commande suivante :
      SELECT * FROM mysql_audit.audit_log_filter;
  3. Affectez les filtres que vous avez créés à l'étape 2 aux utilisateurs. Vous pouvez affecter les filtres d'audit à tous les utilisateurs ou à un utilisateur spécifique.
    1. Pour affecter le filtre d'audit par défaut afin de journaliser tous les événements à partir de n'importe quel compte, utilisez le caractère générique % :
      SELECT audit_log_filter_set_user('%', 'log_all');
    2. Pour affecter le filtre d'audit par défaut afin de journaliser tous les événements de connexion à partir de n'importe quel compte, utilisez le caractère générique % :
      SELECT audit_log_filter_set_user('%', 'log_conn_events');
    3. Pour affecter le filtre d'audit par défaut afin de journaliser tous les événements d'un utilisateur spécifique, tel que user_dba, exécutez la commande suivante :
      SELECT audit_log_filter_set_user('user_dba@%', 'log_all');
    4. Pour afficher les règles affectées, exécutez la commande suivante :
      SELECT * FROM mysql_audit.audit_log_user;
    5. Pour annuler l'affectation des règles à l'utilisateur, user_dba, exécutez la commande suivante :
      SELECT audit_log_filter_remove_user('user_dba@%');
  4. (Facultatif) Vous pouvez insérer vos propres données d'événement avec le composant audit_api_message_emit. Reportez-vous à Fonction Audit Message. Exemples :
    SELECT audit_api_message_emit_udf('component_text', 'producer_text', 'message_text', 'key1', 'value1', 'key2', 123, 'key3', NULL) AS 'Message';

Accéder aux données d'audit et les analyser

Utilisez les données d'audit pour surveiller le système de base de données.

Utilisation d'un client de ligne de commande

Utilisez un client de ligne de commande tel que le client MySQL ou le shell MySQL pour accéder aux données d'audit et les analyser.

  1. Connectez le système de base de données à l'aide du client de ligne de commande de votre choix.
  2. Pour afficher les nouveaux journaux depuis la dernière vérification, exécutez la commande suivante. Cela garantit que vous êtes toujours mis à jour avec les derniers journaux d'audit sans revoir les journaux plus anciens.
    SELECT audit_log_read(audit_log_read_bookmark());
  3. Pour extraire les journaux d'audit à partir d'un horodatage particulier, fournissez des paramètres supplémentaires dans la fonction audit_log_read() :
    SELECT audit_log_read('{ "start": { "timestamp": "2023-08-24 12:30:00" }, "max_array_length": 500 }');
  4. Pour afficher les données d'audit dans un format plus facile à lire, utilisez les fonctions JSON_PRETTY() et CONVERT() :
    SELECT JSON_PRETTY(CONVERT(audit_log_read( ... ) USING UTF8MB4));
  5. Pour transformer les données au format tabulaire, utilisez les fonctions JSON MySQL. Par exemple, vous pouvez transformer un sous-ensemble de paires nom-valeur JSON en un format de table structurée, ce qui facilite l'interaction avec les données et leur analyse :
    SELECT @@server_uuid as server_uuid, ts, class, event, login_ip,login_user,connection_id,
     status,connection_type,_client_name,_client_version,
     command,sql_command,command_status
    FROM
    JSON_TABLE
    (
      AUDIT_LOG_READ( '{ "start": {\"timestamp\": \"2023-08-16 15:33:37\"}, \"max_array_length\": 10 }' ), 
      '$[*]'
      COLUMNS
      ( 
        ts TIMESTAMP PATH '$.timestamp',
        class VARCHAR(20) PATH '$.class',
        event VARCHAR(80) PATH '$.event',      
        login_ip VARCHAR(200) PATH '$.login.ip',
        login_user VARCHAR(200) PATH '$.login.user',
        connection_id VARCHAR(80) PATH '$.connection_id',
        status INT PATH '$.connection_data.status',
        connection_type VARCHAR(40) PATH '$.connection_data.connection_type',
        _client_name VARCHAR(80) PATH '$.connection_data.connection_attributes._client_name',
        _client_version VARCHAR(80) PATH '$.connection_data.connection_attributes._client_version',
        command VARCHAR(40) PATH '$.general_data.command',
        sql_command VARCHAR(40) PATH '$.general_data.sql_command',
        command_status VARCHAR(40) PATH '$.general_data.status'
       )) as audit_log;
  6. Pour affiner davantage l'extraction des données, utilisez les clauses WHERE dans les instructions SQL. Par exemple, WHERE connection_type <> 'SSL'.