Plugin di audit MySQL Enterprise

Il plugin MySQL Enterprise Audit consente a MySQL Server di produrre un file di log contenente un record di audit dell'attività del server. Il contenuto del log include quando i client si connettono e disconnettono e quali azioni eseguono durante la connessione, ad esempio i database e le tabelle a cui accedono.

È possibile aggiungere statistiche per il tempo e le dimensioni di ogni query per rilevare valori erratici. Per impostazione predefinita, i log dei plugin di audit sono disabilitati e occorre definire i filtri dei plugin di audit per abilitare la registrazione degli eventi controllabili per tutti o per utenti specifici.

Argomenti correlati

Concessione dei privilegi di amministrazione di audit

Per impostazione predefinita, l'utente amministratore HeatWave definito durante la creazione del sistema DB dispone del privilegio AUDIT_ADMIN. È possibile concedere privilegi di amministrazione dell'audit a più utenti.

Uso di un client dalla riga di comando

Utilizzare un client della riga di comando come il client MySQL o la shell MySQL per concedere privilegi di amministrazione dell'audit a più utenti.

  1. Connettersi al sistema DB utilizzando il client della riga di comando desiderato.
  2. Eseguire il comando seguente per concedere all'utente User001 il privilegio di amministrazione dell'audit:
    GRANT AUDIT_ADMIN ON *.* TO <User001>;

Definizione dei filtri del plugin di audit

È necessario definire i filtri dei plugin di audit per abilitare la registrazione degli eventi verificabili per tutti gli utenti o per utenti specifici. Per impostazione predefinita, i log dei plugin di audit sono disabilitati.

Uso di un client dalla riga di comando

Utilizzare un client della riga di comando come il client MySQL o la shell MySQL per definire i filtri dei plugin di audit per abilitare la registrazione degli eventi controllabili per tutti o utenti specifici.

Questa attività richiede quanto segue:
  • MySQL versione 8.0.34-u2 o successiva.
  1. Connettersi al sistema DB utilizzando il client della riga di comando desiderato.
  2. Definire i filtri di audit per abilitare la registrazione. Vedere Scrittura delle definizioni dei filtri dei log di audit.
    1. Per controllare tutti gli eventi, eseguire il comando seguente:
      SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
    2. Per controllare solo gli eventi di connessione, eseguire il comando seguente:
      SELECT audit_log_filter_set_filter('log_conn_events','{ "filter": { "class": { "name": "connection" } } }');
    3. Per visualizzare i filtri di audit, eseguire il comando seguente:
      SELECT * FROM mysql_audit.audit_log_filter;
  3. Assegnare i filtri creati nel Passo 2 agli utenti. È possibile assegnare i filtri di audit a tutti gli utenti o a un utente specifico.
    1. Per assegnare il filtro di audit predefinito per registrare tutti gli eventi da qualsiasi account, utilizzare il carattere jolly %:
      SELECT audit_log_filter_set_user('%', 'log_all');
    2. Per assegnare il filtro di audit predefinito per registrare tutti gli eventi di connessione da qualsiasi account, utilizzare il carattere jolly %:
      SELECT audit_log_filter_set_user('%', 'log_conn_events');
    3. Per assegnare il filtro di audit predefinito per registrare tutti gli eventi da un utente specifico, ad esempio user_dba, eseguire il comando seguente:
      SELECT audit_log_filter_set_user('user_dba@%', 'log_all');
    4. Per visualizzare le regole assegnate, eseguire il comando seguente:
      SELECT * FROM mysql_audit.audit_log_user;
    5. Per rimuovere l'assegnazione delle regole dall'utente, user_dba, eseguire il comando seguente:
      SELECT audit_log_filter_remove_user('user_dba@%');
  4. (Facoltativo) È possibile inserire i propri dati di evento con il componente audit_api_message_emit. Vedere Funzione messaggio di audit. Ad esempio:
    SELECT audit_api_message_emit_udf('component_text', 'producer_text', 'message_text', 'key1', 'value1', 'key2', 123, 'key3', NULL) AS 'Message';

Accesso e analisi dei dati di audit

Utilizzare i dati di audit per monitorare il sistema DB.

Uso di un client dalla riga di comando

Utilizzare un client della riga di comando, ad esempio un client MySQL o una shell MySQL, per accedere e analizzare i dati di controllo.

  1. Connettersi al sistema DB utilizzando il client della riga di comando desiderato.
  2. Per visualizzare i nuovi log dall'ultimo controllo, eseguire il comando seguente. Ciò garantisce di essere sempre aggiornato con i log di audit più recenti senza dover rivedere i log meno recenti.
    SELECT audit_log_read(audit_log_read_bookmark());
  3. Per estrarre i log di audit a partire da un determinato indicatore orario, fornire parametri aggiuntivi all'interno della funzione audit_log_read():
    SELECT audit_log_read('{ "start": { "timestamp": "2023-08-24 12:30:00" }, "max_array_length": 500 }');
  4. Per visualizzare i dati di audit in un formato più semplice da leggere, utilizzare le funzioni JSON_PRETTY() e CONVERT().
    SELECT JSON_PRETTY(CONVERT(audit_log_read( ... ) USING UTF8MB4));
  5. Per trasformare i dati in formato tabulare, utilizzare le funzioni JSON MySQL. Ad esempio, è possibile trasformare un subset delle coppie nome-valore JSON in un formato di tabella strutturata, semplificando l'interazione e l'analisi dei dati:
    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. Per perfezionare ulteriormente l'estrazione dei dati, utilizzare le clausole WHERE nelle istruzioni SQL. Ad esempio, WHERE connection_type <> 'SSL'.