MySQL-Datenbankprüfung verwenden

In diesem Thema wird beschrieben, wie Sie das Cloud SQL for MySQL-Audit-Plug-in aktivieren und verwenden. Eine Übersicht finden Sie unter MySQL-Datenbankprüfung. Weitere Informationen zu MySQL-Plug-ins finden Sie unter MySQL-Plug-in laden.

Hinweis

Audit-Logs zum Datenzugriff

Aktivieren und konfigurieren Sie Audit-Logs zum Datenzugriff. Siehe Audit-Logs zum Datenzugriff konfigurieren.

Für Audit-Nutzer erforderliche Berechtigungen

Sie benötigen EXECUTE-Berechtigungen für die gespeicherten Audit-Prozeduren, um sie auszuführen. Wenn ein Administrator die Zugriffsberechtigungen eines Prüfers für die gespeicherten Audit-Prozeduren ändern muss, sollte er den GRANT- oder REVOKE-Befehl im mysql-Client verwenden. Weitere Informationen zu den Nutzerberechtigungen finden Sie unter MySQL-Nutzerberechtigungen. Wenn ein Administrator beispielsweise einem Auditor mit dem Namen user Zugriff gewähren möchte, um die Audit-Regeln zu verwalten, kann er die Berechtigungen mit der folgenden Anweisung erteilen:

CREATE USER 'user'@'%' IDENTIFIED BY 'password';
GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';

Wenn dieser Administrator später den Zugriff für den Prüfer widerrufen möchte, kann er die Berechtigungen mit der folgenden Anweisung widerrufen:

REVOKE ALL ON PROCEDURE mysql.cloudql_list_audit_rule FROM 'user'@'%';

Standardmäßig sind Nutzer, die mit Cloud SQL erstellt wurden (außer IAM-Nutzer), Administratoren, die alle Berechtigungen außer FILE und SUPER haben, einschließlich aller Berechtigungen für die gespeicherten Audit-Prozeduren. IAM-Datenbanknutzer haben standardmäßig keine Berechtigungen.

Cloud SQL for MySQL-Audit-Plug-in aktivieren

Das Cloud SQL for MySQL-Audit-Plug-in (cloudsql_mysql_audit) steuert das Prüfverhalten für eine bestimmte Datenbankinstanz. Damit Sie das Plug-in verwenden können, müssen Sie es zuerst auf der Cloud SQL-Instanz aktivieren.

Verwenden Sie eine der folgenden Optionen, um das Plug-in cloudsql_mysql_audit zu aktivieren:

  • --cloudsql_mysql_audit=ON

    Weist den Server an, das Plug-in zu aktivieren. Wenn das Plug-in nicht initialisiert werden kann, wird der Server mit deaktiviertem Plug-in ausgeführt.

  • --cloudsql_mysql_audit=FORCE

    Weist den Server an, das Plug-in zu aktivieren. Wenn die Plug-in-Initialisierung jedoch fehlschlägt, startet der Server nicht. Mit anderen Worten: Diese Option erzwingt, dass der Server mit dem aktivierten Plug-in oder gar nicht ausgeführt wird.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Wie FORCE, verhindert jedoch, dass das Plug-in zur Laufzeit entladen wird. Wenn ein Nutzer versucht, das Plug-in mit UNINSTALL PLUGIN zu entladen, tritt ein Fehler auf.

Plug-in-Aktivierungsstatus sind in der Spalte PLUGIN_STATUS der Tabelle INFORMATION_SCHEMA.PLUGINS sichtbar.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Öffnen Sie die Instanz und klicken Sie auf Bearbeiten.
  3. Scrollen Sie nach unten zum Abschnitt Flags.
  4. Zum Setzen eines Flags, das noch nicht für die Instanz gesetzt wurde, klicken Sie auf Flag hinzufügen, wählen Sie cloudsql_mysql_audit im Drop-down-Menü aus und legen Sie als Wert ON fest.
  5. Klicken Sie auf Speichern, um die Änderungen zu speichern.
  6. Bestätigen Sie die Änderungen auf der Seite Übersicht unter Flags.

gcloud

Dabei gilt:

  • INSTANCE_NAME: Der Name der Instanz, für die Sie das Flag festlegen.
gcloud sql instances patch INSTANCE_NAME \
           --database-flags cloudsql_mysql_audit=ON

Mit diesem Befehl werden alle zuvor festgelegten Datenbank-Flags überschrieben. Wenn Sie diese Flags beibehalten und neue Flags hinzufügen möchten, geben Sie die Werte für alle Flags an, die Sie für die Instanz festlegen möchten. Für alle Flags, die nicht ausdrücklich angegeben werden, gilt der Standardwert. Für Flags, die keinen Wert haben, geben Sie den Flag-Namen gefolgt von einem Gleichheitszeichen (=) ein.

REST v1beta4

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID

HTTP-Methode und URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

JSON-Text anfordern:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

REST Version 1

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID

HTTP-Methode und URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

JSON-Text anfordern:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "ON"
      }
    ]
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

Einstellungen für das Cloud SQL for MySQL-Audit-Plug-in

Mit den folgenden Flags können Sie das Verhalten des Cloud SQL for MySQL-Audit-Plug-ins optimieren. Alle Flags können geändert werden, ohne die Datenbank neu zu starten. Informationen zum Verwalten der Flags finden Sie unter Datenbank-Flags konfigurieren.

  • cloudsql_mysql_audit_data_masking_regex

    Ein regulärer Ausdruck für die Datenmaskierung, der mit Perl-kompatiblen regulären Ausdrücken (PCREs) kompatibel ist.

    Im Ausgabe-Audit-Log werden Nutzerpasswörter (<psw>) standardmäßig durch die Passwortmaske *** ersetzt.

    Regex wird nur auf Anweisungen mit einem Befehlstyp angewendet, der mit cloudsql_mysql_audit_data_masking_cmds angegeben wird. Wenn Sie gcloud verwenden, müssen Sie eine Flag-Datei verwenden, um Werte mit komplexen Sonderzeichen festzulegen.

    Standardwerte für dieses Flag:

    
    identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/|
    \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/|
    \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[
    '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?)
    (?<!\\)['|"]
    
    

    Betrachten Sie die folgenden Beispiele.

    • Ohne cloudsql_mysql_audit_data_masking_regex würde ein Audit-Logeintrag, der einen Befehl zum Erstellen eines Nutzers beschreibt, so aussehen:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified
      by 'pw'"}
      
    • Bei dem Standardwert cloudsql_mysql_audit_data_masking_regex würde dasselbe Audit-Log so geändert werden:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified by
      '***'"}
      
    • Wenn Sie cloudsql_mysql_audit_data_masking_regex auf (?<psw>.*) setzen, kann Cloud SQL den gesamten Abfrageinhalt filtern.

      {..."cmd":"create_user","query":"***"}
      
  • cloudsql_mysql_audit_data_masking_cmds

    Durch Kommas getrennte Liste von Befehlen, auf die der Datenmaskierungs-Regex (cloudsql_mysql_audit_data_masking_regex) angewendet wird. Legen Sie einen leeren String ("") fest, um die Filterung zu beenden. Wenn Sie gcloud verwenden, müssen Sie eine Flag-Datei verwenden, um eine durch Kommas getrennte Liste festzulegen. Der Standardwert enthält MySQL-Befehle mit der folgenden Passwortklausel:

    create_user,alter_user,grant,update
    
  • cloudsql_mysql_audit_max_query_length

    Steuert die maximale Länge der Abfrage, die im Audit-Log aufgezeichnet werden soll. Wenn die Details der Abfrage nicht angezeigt werden sollen, können Sie 0 verwenden. Das bedeutet, dass die Abfrage nicht im Audit-Log erfasst wird. Dies spart Speicherplatz für das Log, was zu niedrigeren Kosten führt. -1 bedeutet, dass es keine Einschränkung gibt. Der Standardwert ist -1.

  • cloudsql_mysql_audit_log_write_period

    Der Logschreibzeitraum, für den der Autorthread den Inhalt des Zwischenspeichers auf das Laufwerk schreibt, nachdem die Anzahl an Millisekunden verstrichen ist, die Sie für diese Flag-Option festgelegt haben, oder wenn der Zwischenspeicher voll ist. Wenn Sie diese Flag-Option auf 0 setzen, muss der Nutzerthread auf eine Benachrichtigung vom Autorthread warten, dass der Schreibvorgang abgeschlossen ist. Der Standardwert ist 500 (Millisekunden).

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Öffnen Sie die Instanz und klicken Sie auf Bearbeiten.
  3. Scrollen Sie nach unten zum Abschnitt Flags.
  4. Zum Setzen eines neuen Flags, das noch nicht für die Instanz gesetzt wurde, klicken Sie auf Flag hinzufügen, wählen Sie ein Datenbank-Flag aus der Liste über dem Drop-down-Menü aus und legen Sie seinen Wert fest.
  5. Klicken Sie auf Speichern, um die Änderungen zu speichern.
  6. Bestätigen Sie die Änderungen auf der Seite Übersicht unter Flags.

gcloud

Dabei gilt:

  • INSTANCE_NAME: Der Name der Instanz, für die Sie das Flag festlegen.
  • FLAG_NAME: Der Name des Konfigurations-Flags.
  • FLAG_VALUE: Der Wert, der für das Flag verwendet werden soll.

        gcloud sql instances patch INSTANCE_NAME /
                   --database-flags FLAG_NAME=FLAG_VALUE
    

REST v1beta4

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID

HTTP-Methode und URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

JSON-Text anfordern:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

REST Version 1

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID

HTTP-Methode und URL:

PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id

JSON-Text anfordern:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "flag_name",
        "value": "flag_value"
      }
    ]
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

Datenbankprüfung konfigurieren

Audit-Regeln verwalten

Cloud SQL verwendet eine Reihe von gespeicherten Prozeduren, um Audit-Regeln für Cloud SQL for MySQL-Audit-Plug-ins zu verwalten. Es gibt vier gespeicherte Prozeduren, mit denen Sie Audit-Regeln erstellen, auflisten, aktualisieren und löschen können.

Jede gespeicherte Prozedur gibt zwei Variablen zurück: @outval und @outmsg. Diese Variablen geben den Statuscode bzw. die Fehlermeldung der gespeicherten Prozedur an. Sie können ein Sternchen (*) als Platzhalter verwenden, um nach Nutzer-, Host-, Datenbank- und Tabellennamen zu suchen. Verwenden Sie das Sternchen als Suffix, als Präfix oder für beides. Außerdem können Sie das Platzhalterzeichen % nur für Hosts verwenden. Sie können mit dem Backtick (`) angeben, dass ein String wörtlich verwendet werden soll. Beispielsweise führt `ta*ble` zu einem wörtlichen Abgleich.

Damit die neuen Änderungen wirksam werden, sollten Sie entweder die gespeicherten Prozeduren mit dem Eingabeparameter reload_mode=1 ausführen oder mysql.cloudsql_reload_audit_rule(1) aufrufen, um die neuen Änderungen zu übernehmen.

Audit-Regeln erstellen

Sie können mysql.cloudsql_create_audit_rule verwenden, um eine neue Audit-Regel zu erstellen.

Verwenden Sie die folgende Anweisung, um die Audit-Regel zu erstellen und in einem einzelnen Aufruf neu zu laden:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;

Verwenden Sie die folgende Anweisung, um die Regel zu erstellen und in einem separaten Aufruf neu zu laden:

CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',0, @outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

Mit dem vorherigen Befehl können Sie mehrere Regeln erstellen und dann alle Änderungen gleichzeitig neu laden.

In den folgenden Tabellen sind die Eingabe- und Ausgabeparameter für den vorherigen Befehl aufgeführt.

Eingabeparameter
Name Typ Beschreibung Beispiel
user@host oder user@ip String Die durch Kommas getrennte Liste der zu prüfenden Datenbanknutzer. Verwenden Sie das Format user@host oder user@ip.

user1@localhost,
user1@*,
user1@%,
user@ip
db String Die durch Kommas getrennte Liste der zu prüfenden Datenbanken. db1,db2,db3*
obj String Die durch Kommas getrennte Liste von Datenbankobjekten, die geprüft werden sollen. table1,table2,table3*
ops String Die durch Kommas getrennte Liste von Datenbankaktionen, die geprüft werden sollen. select,delete,insert
op_result String Prüft erfolgreiche (S) oder fehlgeschlagene (U) Vorgänge oder oder beides (B). S, U oder B
reload_mode Integer 0, um die Regel nicht neu zu laden, und 1 zum Neuladen. 0 oder 1
Ausgabeparameter
Name Typ Beschreibung Beispiel
@outval Ganzzahl Der Statuscode der gespeicherten Prozedur. 0 für Erfolg und 1 für Fehler.
@outmsg String Die Fehlermeldung der gespeicherten Prozedur.

Für Audit-Regeln gelten die folgenden Einschränkungen:

Beschränkungen
Länge von user, db, obj und ops. Die maximale Größe beträgt 2.048 Zeichen.
Anzahl der Kombinationen von user, db, obj und ops. Maximal 1.000 Kombinationen. Beispiel: Eine Audit-Regel, die user1,user2, db1, db2, table1,table2 und select,delete prüft, generiert 2 x 2 x 2 x 2 = 16 Kombinationen.

Audit-Regeln auflisten

Prüfer können mit mysql.cloudsql_list_audit_rule vorhandene Audit-Regeln auflisten.

Verwenden Sie die folgenden Befehle, um die Audit-Regeln 1 und 2 aufzulisten:

CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;

Gehen Sie so vor, um alle Audit-Regeln aufzulisten:

CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;

In den folgenden Tabellen sind die Eingabe- und Ausgabeparameter für den vorherigen Befehl aufgeführt.

Eingabeparameter
Name Typ Beschreibung Beispiel
rule_id String Die durch Kommas getrennte Liste von zu entfernenden Regel-IDs. 1,2,3
Ausgabeparameter
Name Typ Beschreibung Beispiel
@outval Ganzzahl Der Statuscode der gespeicherten Prozedur. 0 für Erfolg und 1 für Fehler.
@outmsg String Die Fehlermeldung der gespeicherten Prozedur.

Audit-Regeln aktualisieren

Sie können mysql.cloudsql_update_audit_rule verwenden, um eine vorhandene Audit-Regel zu aktualisieren.

Verwenden Sie die folgende Anweisung, um die Audit-Regel zu aktualisieren und in einem einzelnen Aufruf neu zu laden:

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;

Möglicherweise möchten Sie mehrere Audit-Regeln in einer Sitzung aktualisieren, bevor Sie die Regeln neu laden. Mit der folgenden gespeicherten Prozedur können Sie Regeln in einem einzigen Schritt aktualisieren und dann in einem späteren Schritt noch neu laden.

CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL mysql.cloudsql_reload_audit_rule(1);

In den folgenden Tabellen sind die Eingabe- und Ausgabeparameter für den vorherigen Befehl aufgeführt.

Eingabeparameter
Name Typ Beschreibung Beispiel
rule_id Ganzzahl Die ID für die zu aktualisierende Regel. 5
user@host String Die durch Kommas getrennte Liste der zu prüfenden Datenbanknutzer. Verwenden Sie das Format "Nutzer@Host".

user1@localhost,user1@*
user1@%
db String Die durch Kommas getrennte Liste der zu prüfenden Datenbanken. db1,db2,db3*
obj String Die durch Kommas getrennte Liste von Datenbankobjekten, die geprüft werden sollen. table1,table2,table3*
ops String Die durch Kommas getrennte Liste von Datenbankaktionen, die geprüft werden sollen. SELECT,DELETE,INSERT
op_result String Prüft erfolgreiche (S) oder fehlgeschlagene (U) Vorgänge oder oder beides (B). S, U oder B
reload_mode Integer 0, um die Regel nicht neu zu laden, und 1 zum Neuladen. 0 oder 1
Ausgabeparameter
Name Typ Beschreibung Beispiel
@outval Ganzzahl Der Statuscode der gespeicherten Prozedur. 0 für Erfolg und 1 für Fehler.
@outmsg String Die Fehlermeldung der gespeicherten Prozedur.

Für Audit-Regeln gelten die folgenden Einschränkungen:

Beschränkungen
Länge von user, db, obj und ops. Die maximale Größe beträgt 2.048 Zeichen.
Anzahl der Kombinationen von user, db, obj und ops. Maximal 1.000 Kombinationen. Beispiel: Eine Audit-Regel, die user1,user2, db1, db2, table1,table2 und select,delete prüft, generiert 2 x 2 x 2 x 2 = 16 Kombinationen.

Audit-Regeln löschen

Sie können mysql.cloudsql_delete_audit_rule verwenden, um eine vorhandene Audit-Regel zu löschen.

Verwenden Sie die folgende Anweisung, um die Audit-Regel zu löschen und in einem einzelnen Aufruf neu zu laden:

CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;

Verwenden Sie die folgende Anweisung, um die Regel zu löschen und in einem separaten Aufruf neu zu laden:

CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);

Mit dem vorherigen Befehl können Sie mehrere Regeln löschen und dann alle Änderungen gleichzeitig neu laden.

In den folgenden Tabellen sind die Eingabe- und Ausgabeparameter für den vorherigen Befehl aufgeführt.

Eingabeparameter
Name Typ Beschreibung Beispiel
rule_id String Die durch Kommas getrennte Liste von zu entfernenden Regel-IDs. 1,2,3
reload_mode Integer 0, um die Regel nicht neu zu laden, und 1 zum Neuladen. 0 oder 1
Ausgabeparameter
Name Typ Beschreibung Beispiel
@outval Ganzzahl Der Statuscode der gespeicherten Prozedur. 0 für Erfolg und 1 für Fehler.
@outmsg String Die Fehlermeldung der gespeicherten Prozedur.

Vorgangsgruppen

Das Cloud SQL for MySQL-Audit-Plug-in unterstützt die Verwendung von Vorgangsgruppen in Regeldefinitionen, um Sammlungen von Aktivitäten zu prüfen. Sie können die folgenden Vorgangsgruppen verwenden, um die Erstellung von Audit-Regeln zu vereinfachen.

Vorgangsgruppen Enthaltene Vorgänge
dql select
dml delete, delete_multi, insert, insert_select, load, replace, replace_select, truncate, update, update_multi,
ddl alter_db, alter_event, alter_function, alter_procedure, alter_table, alter_user, create_db, create_event, create_function, create_index, create_procedure, create_table, create_trigger, create_user, create_udf, create_view, drop_db, drop_event, drop_function, drop_index, drop_procedure, drop_table, drop_trigger, drop_user, drop_view, rename_table, rename_user
dcl grant, revoke, revoke_all
show show_binlog_events, show_create_func, show_create_proc, show_procedure_code, show_create_event, show_create_trigger, show_events, show_function_code, show_grants, show_relaylog_events, show_triggers,
call call_procedure

Cloud SQL-Datenbank-Audit-Logs ansehen

Datenbank-Audit-Log-Einträge in Cloud Logging ansehen

Wenn Sie sich Datenbank-Audit-Logs ansehen möchten, müssen Sie zuerst Audit-Logs für den Datenzugriff für Ihr Projekt aktiviert haben. Die generierten MySQL-Audit-Logs für eine bestimmte Instanz werden als Audit-Logs zum Datenzugriff an Cloud Logging gesendet. Sie können die generierten MySQL-Datenbank-Audit-Logs über die Log-Explorer-Anwendung aufrufen.

In Log-Explorer können Sie MySQL-Audit-Logs aufrufen. Verwenden Sie dafür die folgende Abfrage, um alle MySQL-Datenbank-Audit-Logs für ein bestimmtes Cloud SQL-Projekt über die erweiterte Filteroberfläche aufzurufen.

Dabei gilt:

  • PROJECT_NAME: Der Name des Projekts, für das Sie Audit-Logs aufrufen möchten.
    resource.type="cloudsql_database"
    logName="projects/PROJECT_NAME/logs/cloudaudit.googleapis.com%2Fdata_access"
    protoPayload.request.@type="type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"

Alternativ können Sie den Logfilter cloudaudit.googleapis.com/data_access auswählen.

Audit-Log-Format

Ein Audit-Log enthält die folgenden Felder.

Feldname Beschreibung
msgType Ein String, der den Audit-Log-Nachrichtentyp darstellt. Der einzige Wert für msgType ist activity.
status Status des Vorgangs, entweder success oder unsuccessful.
date Ein Zeitstempel, der angibt, wann das Audit-Ereignis generiert wurde.
threadId Die ID des MySQL-Threads.
queryId Die ID der MySQL-Abfrage.
user Ein String, der den vom Client gesendeten Nutzernamen darstellt. Dieser kann vom Wert "privUser" abweichen.
privUser Ein String, der den Nutzer darstellt, als den der Server den Client authentifiziert hat. Dies ist der Nutzername, den der Server für die Berechtigungsprüfung verwendet. Er kann vom Nutzerwert abweichen.
gcpIamAccount Ein String, der das GCP-IAM-Konto oder -Dienstkonto darstellt.
ip Ein String, der die Client-IP-Adresse darstellt.
host Ein String, der den Hostnamen des Clients darstellt.
errCode Der MySQL-Fehlercode für einen fehlgeschlagenen Vorgang. Siehe MySQL Referenz zu Serverfehlermeldungen.
cmd Ein String, der die zu verwendende SQL-Anweisung (Vorgangstyp) angibt. Beispiel: INSERT, UPDATE oder DELETE.
objects Die Audit-Objekte. Normalerweise eine Tabelle. Dieses Feld enthält die folgenden Informationen zum Objekt:

db Ein String, der den Standarddatenbanknamen darstellt.
name Ein String, der den Objektnamen darstellt. Normalerweise der Tabellenname.
objType Ein String, der den Typ des Objekts darstellt. Normalerweise TABLE.
query Eine SQL-Anweisung, die direkt ausgeführt wird.
chunkCount Gesamtzahl der Blöcke, wenn die Audit-Logabfragegröße mehr als cloudsql_mysql_audit_event_split_threshold (90.000) beträgt.
chunkIndex Index des Blocks. Beginnt mit chunk_index.
@type Der Typ ist immer type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry.

Das folgende Beispiel zeigt einen Audit-Logeintrag.

{
"msgType":"activity",
"status":"unsuccessful",
"date":"2021-11-11T06:16:16.163603Z",
"threadId":"750",
"queryId":"26763",
"user":"root",
"priv_user":"root",
"ip":"",
"host":"localhost",
"errCode":"1146",
"cmd":"select",
"objects":[{"db":"test","name":"t4","obj_type":"TABLE"}],
"query":"select * from test.t4",
"chunkCount":2,
"chunkIndex":2,
"@type":"type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry"
}

Datenbankprüfung deaktivieren

Zum Deaktivieren des Cloud SQL for MySQL-Audit-Plug-ins können Sie das Datenbank-Flag cloudsql_mysql_audit auf OFF setzen oder entfernen.

Console

  1. Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.

    Cloud SQL-Instanzen aufrufen

  2. Öffnen Sie die Instanz und klicken Sie auf Bearbeiten.
  3. Scrollen Sie nach unten zum Abschnitt Flags.
  4. Zum Setzen eines Flags, das noch nicht für die Instanz gesetzt wurde, klicken Sie auf Flag hinzufügen, wählen Sie cloudsql_mysql_audit im Drop-down-Menü aus und legen Sie als Wert OFF fest.
  5. Klicken Sie auf Speichern, um die Änderungen zu speichern.
  6. Bestätigen Sie die Änderungen auf der Seite Übersicht unter Flags.

gcloud

Dabei gilt:

  • INSTANCE_NAME: Der Name der Instanz, für die Sie das Flag festlegen.

    gcloud sql instances patch INSTANCE_NAME \
               --database-flags cloudsql_mysql_audit=OFF
    

REST v1beta4

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID

HTTP-Methode und URL:

PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id

JSON-Text anfordern:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

REST Version 1

Ersetzen Sie diese Werte in den folgenden Anfragedaten:

  • project-id: die Projekt-ID
  • instance-id: die Instanz-ID

HTTP-Methode und URL:

PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id

JSON-Text anfordern:

{
  "settings":
  {
    "databaseFlags":
    [
      {
        "name": "cloudsql_mysql_audit",
        "value": "OFF"
      }
    ]
  }
}

Wenn Sie die Anfrage senden möchten, maximieren Sie eine der folgenden Optionen:

Sie sollten in etwa folgende JSON-Antwort erhalten:

Beispiele für Audit-Regeln

  1. Alle Aktivitäten für alle Nutzer prüfen:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
    
  2. Alle Aktivitäten für einen einzelnen Nutzer user1 prüfen:

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
    
  3. Alle Aktivitäten für alle Nutzer prüfen, die mit user beginnen:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
    
  4. Alle DML-Vorgänge für alle Nutzer prüfen:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
    
  5. Auswahlvorgang für eine spezielle Datenbank db1 prüfen:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
    
  6. Alle Aktivitäten für eine Datenbank mit dem Sonderzeichen db~1 prüfen:

    CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
    
  7. Auswahl- und Löschvorgänge für die Tabelle db1.table1 prüfen:

    CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
    
  8. Alle erfolgreichen Vorgänge prüfen:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
    
  9. Nicht alle Aktivitäten für alle Nutzer prüfen, die mit user beginnen:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);
    

Fehlerbehebung

Problem Fehlerbehebung
cloudsql_mysql_audit wird nicht angezeigt, wenn ich den Befehl aufrufe:

SHOW (global) variables
cloudsql_mysql_audit ist der Name des Plug-ins. Überprüfen Sie mit dem folgenden Befehl, ob es aktiv ist:


SHOW PLUGINS

Prüfen Sie auch den Eintrag status.
Warum werden nach der Aktivierung von cloudsql_mysql_audit keine MySQL-Audit-Logs angezeigt? Sie müssen die Audit-Logs zum Datenzugriff aktivieren, wie unter Audit-Logs zum Datenzugriff konfigurieren beschrieben. Außerdem werden Audit-Regeln benötigt, damit das Cloud SQL for MySQL-Audit-Plug-in die gewünschten Audit-Logs prüfen kann. Verwenden Sie gespeicherte Prozeduren mit `reload_mode=1`, um Audit-Regeln zu erstellen, oder führen Sie den folgenden Befehl aus oder starten Sie die Datenbank neu, damit die neu hinzugefügten Audit-Regeln funktionieren:


CALL mysql.cloudsql_reload_audit_rule(1)
Beim Aktualisieren des Datenbank-Flags wird der folgende Fehler angezeigt:

Fehler 1193: Unbekannte Systemvariable "cloudsql_mysql_audit_xxx"
cloudsql_mysql_audit_xxx-Flags funktionieren nur, wenn das Audit-Plug-in aktiv ist. Entfernen Sie vorhandene cloudsql_mysql_audit_xxx-Flags aus der Instanz und aktivieren Sie dann das Plug-in mit dem folgenden Befehl, bevor Sie cloudsql_mysql_audit_xxx-Flags aktualisieren:


cloudsql_mysql_audit=ON
Ich kann Audit-Logs sehen, auch wenn ich keine Audit-Regeln festgelegt habe. Änderungen an den Audit-Regeltabellen (mysql.audit_log_rules und mysql.audit_log_rules_expanded) und den gespeicherten Audit-Prozeduren (mysql.cloudsql_xxxx_audit_rule) werden standardmäßig protokolliert.
Nachdem ich Änderungen an der primären Instanz vorgenommen habe, werden die Audit-Logs auf meinen Replikatinstanzen nicht angezeigt. Replikations-Threads und Absturzwiederherstellungs-Threads werden nicht protokolliert. Cloud SQL prüft Aktivitäten auf der primären Instanz, aber nicht auf der Replikatinstanz.
Ich habe versucht, mit dem folgenden Befehl Werte aus einer durch Kommas getrennten Liste festzulegen, aber es funktioniert nicht.

gcloud instances patch --database-flags
Wenn Sie eine durch Kommas getrennte Liste von Flag-Werten mit gcloud-Befehlen angeben, verwenden Sie das Argument --flags-file. Zuerst müssen Sie eine Datei mit den folgenden Informationen erstellen:


--database-flags:
general_log: OFF
cloudsql_mysql_audit_max_query_length: '20'
cloudsql_mysql_audit_data_masking_cmds: select,update

Führen Sie dann den folgenden Befehl aus:


gcloud sql instances patch --flags-file=flagfile
Der folgende Befehl gibt einen Fehler zurück:

CALL mysql.cloudsql_create_canonical_rules
Dies ist beabsichtigt. mysql.cloudsql_create_canonical_rules sollte nur intern von mysql.cloudsql_create_audit_rule und mysql.cloudsql_update_audit_rule aufgerufen werden.
Welche Vorgänge kann ich prüfen? Die unterstützten Vorgänge sind in der vollständigen Liste der unterstützten Vorgänge aufgeführt. Einige Vorgänge wie die folgenden werden nicht geprüft, da sie sich nicht auf die Datenbank auswirken:


USE db_name


oder


SHOW VARIABLES


In einigen Fällen können die Funktionen außerdem nicht als Objekt (nicht unterstützte Features) geprüft werden.
Ich möchte alle Vorgänge für eine bestimmte Tabelle prüfen. Deshalb habe ich die folgende Audit-Regel erstellt:

mysql.cloudsql_create_audit_rule("user@*","db", "table","*","B",1,@1,@2);
Ich kann aber Audit-Logs sehen, die nicht mit dieser Tabelle zusammenhängen, z. B. disconnect und connect.
Einige Vorgänge wie das Trennen oder Verbinden werden als global betrachtet. Die Eingabefelder db und object werden dabei ignoriert.
Beim Erstellen, Aktualisieren oder Löschen einer Audit-Regel mithilfe gespeicherter Prozeduren wird der folgende Fehler angezeigt.

Der MySQL-Server wird mit der Option read-only ausgeführt, sodass er diese Anweisung nicht ausführen kann.
Cloud SQL kann gespeicherte Prozeduren auf einer schreibgeschützten Instanz nicht ändern. Wenn die Instanz primär ist, entfernen Sie die read_only-Flags. Wenn die Instanz eine Replikatinstanz ist, nehmen Sie die Änderungen an ihrer primären Instanz vor. Nachdem die Änderungen der Regeln auf der Replikatinstanz repliziert wurden, führen Sie auf der Replikatinstanz den folgenden Befehl aus, um die Regeln in das Replikat neu zu laden:

CALL mysql.cloudsql_reload_audit_rule(1)
Beim Erstellen, Aktualisieren oder Löschen einer Audit-Regel wird der folgende Fehler angezeigt, obwohl die Änderung erfolgreich war.

0 rows affected
Die Antwort 0 rows affected gilt für die letzte Anweisung, die in der gespeicherten Prozedur ausgeführt wurde, nicht für die Tabellen. Verwenden Sie den folgenden Befehl, um festzustellen, ob die Audit-Regel geändert wurde:


mysql.cloudsql_list_audit_rule
Ich kann cloudsql_mysql_audit_data_masking_cmds und cloudsql_mysql_audit_data_masking_regexp nicht mit gcloud festlegen. gcloud erfordert die Verwendung des Arguments --flags-file zum Festlegen komplexer Flag-Werte (die Flags, die Sonderzeichen enthalten).
Ich habe eine gespeicherte Prozedur mit der Anweisung CREATE USER erstellt, aber das Passwort ist nicht maskiert. Standardmäßig funktioniert die Maskierung nur für cmds (Vorgänge), z. B.:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

Fügen Sie create_procedure in cloudsql_mysql_audit_data_masking_cmds ein, um das Passwort beim Erstellen der gespeicherten Prozedur zu filtern.
Beim Erstellen, Aktualisieren oder Löschen von Audit-Regeln wurde ein Fehler in Bezug auf eine Überschreitung des Zeitlimits für die Sperrenwartezeit angezeigt. Normalerweise tritt dieser Fehler auf, wenn zwei oder mehr Sitzungen gleichzeitig versuchen, die Audit-Regeln zu ändern. Erhöhen Sie in diesem Fall den Wert der Variable innodb_lock_wait_timeout. Sie kann entweder global (mit dem Datenbank-Flag) oder nur für die Sitzung erhöht werden (z. B. mit dem folgenden Befehl):

SET innodb_lock_wait_timeout=120
.

Nächste Schritte