Plugiciel de vérification MySQL Enterprise

Le plugiciel de vérification MySQL Enterprise permet à MySQL Server de produire un fichier journal contenant un enregistrement de vérification 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 interrogation afin de détecter les valeurs aberrantes. Par défaut, les journaux de plugiciel de vérification sont désactivés et vous devez définir des filtres de plugiciel de vérification pour activer la journalisation des événements pouvant être vérifiés pour tous les utilisateurs ou des utilisateurs spécifiques.

Rubriques connexes

Octroi des privilèges d'administration de la vérification

Par défaut, l'utilisateur 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 de vérification à un plus grand nombre d'utilisateurs.

Utilisation d'un client de ligne de commande

Utilisez un client de ligne de commande tel que le client MySQL ou l'interpréteur de commandes MySQL pour accorder des privilèges d'administration de vérification à plus d'utilisateurs.

  1. Connectez-vous au 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 de vérification :
    GRANT AUDIT_ADMIN ON *.* TO <User001>;

Définition des filtres du plugiciel de vérification

Vous devez définir des filtres de plugiciel de vérification pour activer la journalisation des événements pouvant être vérifiés pour tous les utilisateurs ou pour des utilisateurs spécifiques. Par défaut, les journaux du plugiciel de vérification 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 l'interpréteur de commandes MySQL pour définir des filtres de plugiciel de vérification afin d'activer la journalisation des événements pouvant être vérifiés pour tous les utilisateurs ou pour des utilisateurs spécifiques.

Cette tâche nécessite les éléments suivants :
  • MySQL version 8.0.34-u2 ou ultérieure.
  1. Connectez-vous au système de base de données à l'aide du client de ligne de commande de votre choix.
  2. Définir des filtres de vérification pour activer la journalisation. Voir Écriture des définitions de filtre de journal de vérification.
    1. Pour vérifier tous les événements, exécutez la commande suivante :
      SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
    2. Pour vérifier 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 voir les filtres de vérification, 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 de vérification à tous les utilisateurs ou à un utilisateur spécifique.
    1. Pour affecter le filtre de vérification par défaut afin de journaliser tous les événements 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 de vérification par défaut afin d'enregistrer 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 de vérification par défaut pour 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 voir 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. Voir Fonction de message de vérification. Par exemple :
    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 de vérification et les analyser

Utilisez les données de vérification 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 l'interpréteur de commandes MySQL pour accéder aux données de vérification et les analyser.

  1. Connectez-vous au système de base de données à l'aide du client de ligne de commande de votre choix.
  2. Pour voir les nouveaux journaux depuis la dernière vérification, exécutez la commande suivante. Ainsi, vous êtes toujours mis à jour avec les journaux de vérification les plus récents sans revoir les journaux plus anciens.
    SELECT audit_log_read(audit_log_read_bookmark());
  3. Pour extraire les journaux de vérification à partir d'un horodatage particulier, fournissez des paramètres supplémentaires au sein de la fonction audit_log_read() :
    SELECT audit_log_read('{ "start": { "timestamp": "2023-08-24 12:30:00" }, "max_array_length": 500 }');
  4. Pour voir les données de vérification 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 en format tabulaire, utilisez les fonctions JSON MySQL. Par exemple, vous pouvez transformer un sous-ensemble des paires nom-valeur JSON en un format de table structurée, ce qui facilite l'interaction et l'analyse des données :
    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 de données, utilisez les clauses WHERE dans les énoncés SQL. Par exemple, WHERE connection_type <> 'SSL'.