MySQL Enterprise Audit-Plug-in

Mit dem MySQL Enterprise Audit-Plug-in kann MySQL Server eine Logdatei erstellen, die einen Auditdatensatz der Serveraktivität enthält. Der Loginhalt umfasst, wenn Clients eine Verbindung herstellen und die Verbindung trennen, und welche Aktionen sie ausführen, während sie verbunden sind, z. B. auf welche Datenbanken und Tabellen sie zugreifen.

Sie können Statistiken für die Zeit und Größe jeder Abfrage hinzufügen, um Ausreißer zu ermitteln. Standardmäßig sind Audit-Plug-in-Logs deaktiviert, und Sie müssen Audit-Plug-in-Filter definieren, um das Logging von auditierbaren Ereignissen für alle oder bestimmte Benutzer zu aktivieren.

Verwandte Themen

Auditadministrationsberechtigungen erteilen

Standardmäßig verfügt der Administratorbenutzer HeatWave, den Sie beim Erstellen des DB-Systems definiert haben, über die Berechtigung AUDIT_ADMIN. Sie können weiteren Benutzern Auditadministrationsberechtigungen erteilen.

Befehlszeilenclient verwenden

Über einen Befehlszeilenclient wie MySQL-Client oder MySQL Shell können Sie weiteren Benutzern Auditadministrationsberechtigungen erteilen.

  1. Melden Sie sich über einen Befehlszeilenclient Ihrer Wahl beim DB-System an.
  2. Führen Sie den folgenden Befehl aus, um dem Benutzer User001 die Berechtigung zur Auditadministration zu erteilen:
    GRANT AUDIT_ADMIN ON *.* TO <User001>;

Audit-Plug-in-Filter definieren

Sie müssen Audit-Plug-in-Filter definieren, um das Logging protokollierbarer Ereignisse für alle oder bestimmte Benutzer zu aktivieren. Audit-Plug-in-Logs sind standardmäßig deaktiviert.

Befehlszeilenclient verwenden

Verwenden Sie einen Befehlszeilenclient wie den MySQL-Client oder die MySQL-Shell, um Audit-Plug-in-Filter zu definieren, um das Logging von auditierbaren Ereignissen für alle oder bestimmte Benutzer zu aktivieren.

Diese Aufgabe erfordert Folgendes:
  • MySQL Version 8.0.34-u2 oder höher.
  1. Melden Sie sich über einen Befehlszeilenclient Ihrer Wahl beim DB-System an.
  2. Definieren Sie Auditfilter, um das Logging zu aktivieren. Siehe Definitionen für Auditlogfilter schreiben.
    1. Um alle Ereignisse zu prüfen, führen Sie den folgenden Befehl aus:
      SELECT audit_log_filter_set_filter('log_all', '{ "filter": { "log": true } }');
    2. Führen Sie den folgenden Befehl aus, um nur Verbindungsereignisse zu prüfen:
      SELECT audit_log_filter_set_filter('log_conn_events','{ "filter": { "class": { "name": "connection" } } }');
    3. Um Auditfilter anzuzeigen, führen Sie den folgenden Befehl aus:
      SELECT * FROM mysql_audit.audit_log_filter;
  3. Weisen Sie die in Schritt 2 erstellten Filter Benutzern zu. Sie können die Auditfilter allen Benutzern oder einem bestimmten Benutzer zuweisen.
    1. Um den Standardauditfilter zuzuweisen, um alle Ereignisse aus einem beliebigen Account zu protokollieren, verwenden Sie das Platzhalterzeichen %:
      SELECT audit_log_filter_set_user('%', 'log_all');
    2. Um den Standardauditfilter zuzuweisen, um alle Verbindungsereignisse von einem Account zu protokollieren, verwenden Sie das Platzhalterzeichen %:
      SELECT audit_log_filter_set_user('%', 'log_conn_events');
    3. Um den Standardauditfilter zuzuweisen, um alle Ereignisse von einem bestimmten Benutzer wie user_dba zu protokollieren, führen Sie den folgenden Befehl aus:
      SELECT audit_log_filter_set_user('user_dba@%', 'log_all');
    4. Um die zugewiesenen Regeln anzuzeigen, führen Sie den folgenden Befehl aus:
      SELECT * FROM mysql_audit.audit_log_user;
    5. Um die Zuweisung der Regeln zum Benutzer user_dba aufzuheben, führen Sie den folgenden Befehl aus:
      SELECT audit_log_filter_remove_user('user_dba@%');
  4. (Optional) Sie können Ihre eigenen Ereignisdaten mit der Komponente audit_api_message_emit einfügen. Siehe Funktion "Auditnachricht". Beispiele:
    SELECT audit_api_message_emit_udf('component_text', 'producer_text', 'message_text', 'key1', 'value1', 'key2', 123, 'key3', NULL) AS 'Message';

Auf Auditdaten zugreifen und diese analysieren

Mit den Auditdaten können Sie das DB-System überwachen.

Befehlszeilenclient verwenden

Mit einem Befehlszeilenclient wie MySQL-Client oder MySQL Shell können Sie auf Auditdaten zugreifen und diese analysieren.

  1. Melden Sie sich über einen Befehlszeilenclient Ihrer Wahl beim DB-System an.
  2. Um neue Logs seit der letzten Prüfung anzuzeigen, führen Sie den folgenden Befehl aus. Dadurch wird sichergestellt, dass Sie immer mit den neuesten Auditlogs aktualisiert werden, ohne ältere Logs erneut zu prüfen.
    SELECT audit_log_read(audit_log_read_bookmark());
  3. Um Auditlogs ab einem bestimmten Zeitstempel zu extrahieren, geben Sie zusätzliche Parameter in der Funktion audit_log_read() an:
    SELECT audit_log_read('{ "start": { "timestamp": "2023-08-24 12:30:00" }, "max_array_length": 500 }');
  4. Um die Auditdaten in einem einfacher zu lesenden Format anzuzeigen, verwenden Sie die Funktionen JSON_PRETTY() und CONVERT():
    SELECT JSON_PRETTY(CONVERT(audit_log_read( ... ) USING UTF8MB4));
  5. Um Daten in ein tabellarisches Format zu transformieren, verwenden Sie die JSON-Funktionen MySQL. Beispiel: Sie können eine Teilmenge der JSON-Name/Wert-Paare in ein strukturiertes Tabellenformat transformieren, um die Interaktion mit und Analyse von Daten zu vereinfachen:
    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. Um die Datenextraktion weiter zu verfeinern, verwenden Sie WHERE-Klauseln in den SQL-Anweisungen. Beispiel: WHERE connection_type <> 'SSL'.