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
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Öffnen Sie die Instanz und klicken Sie auf Bearbeiten.
- Scrollen Sie nach unten zum Abschnitt Flags.
- 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 WertON
fest. - Klicken Sie auf Speichern, um die Änderungen zu speichern.
- 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 Siegcloud
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 Siegcloud
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 ist500
(Millisekunden).
Console
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Öffnen Sie die Instanz und klicken Sie auf Bearbeiten.
- Scrollen Sie nach unten zum Abschnitt Flags.
- 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.
- Klicken Sie auf Speichern, um die Änderungen zu speichern.
- 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 |
Ganzzahl | 0 , um die Regel nicht neu zu laden, und 1 zum Neuladen. |
0 oder 1 |
Ausgabeparameter | |||
---|---|---|---|
Name | Typ | Beschreibung | Beispiel |
@outval |
int | 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 |
int | 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 |
int | 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 |
Ganzzahl | 0 , um die Regel nicht neu zu laden, und 1 zum Neuladen. |
0 oder 1 |
Ausgabeparameter | |||
---|---|---|---|
Name | Typ | Beschreibung | Beispiel |
@outval |
int | 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 |
Ganzzahl | 0 , um die Regel nicht neu zu laden, und 1 zum Neuladen. |
0 oder 1 |
Ausgabeparameter | |||
---|---|---|---|
Name | Typ | Beschreibung | Beispiel |
@outval |
int | 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:
|
||||||
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
-
Wechseln Sie in der Google Cloud Console zur Seite Cloud SQL-Instanzen.
- Öffnen Sie die Instanz und klicken Sie auf Bearbeiten.
- Scrollen Sie nach unten zum Abschnitt Flags.
- 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 WertOFF
fest. - Klicken Sie auf Speichern, um die Änderungen zu speichern.
- 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
Alle Aktivitäten für alle Nutzer prüfen:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
Alle Aktivitäten für einen einzelnen Nutzer
user1
prüfen:CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
Alle Aktivitäten für alle Nutzer prüfen, die mit
user
beginnen:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
Alle DML-Vorgänge für alle Nutzer prüfen:
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
Auswahlvorgang für eine spezielle Datenbank
db1
prüfen:CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
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);
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);
Alle erfolgreichen Vorgänge prüfen:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
Prüfen Sie nicht alle Aktivitäten für alle Nutzer, 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 status Eintrag.
|
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
- Weitere Informationen zur MySQL-Datenbankprüfung
- Vollständige Liste der Vorgänge für die Datenbankprüfung