Questo argomento descrive come abilitare e utilizzare il plug-in di audit di Cloud SQL per MySQL. Per una panoramica, consulta Controllo dei database MySQL. Per ulteriori informazioni sui plug-in MySQL, consulta Caricamento dei plug-in MySQL.
Prima di iniziare
Audit log degli accessi ai dati
Abilita e configura gli audit log di accesso ai dati. Consulta Configurare gli audit log di accesso ai dati.
Privilegi necessari per gli utenti del controllo
Per eseguirle, devi disporre dei privilegi EXECUTE
per le stored procedure di controllo. Se un amministratore deve modificare i privilegi di accesso di un revisore per utilizzare le stored procedure di controllo, deve utilizzare il comando GRANT
o REVOKE
nel client mysql
. Per maggiori dettagli sui privilegi utente, consulta
Privilegi utente MySQL. Ad esempio, se un amministratore volesse concedere l'accesso a un revisore di nome user
, per gestire le regole di controllo, potrebbe concedere i privilegi utilizzando la seguente istruzione:
CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT EXECUTE ON PROCEDURE mysql.cloudsql_list_audit_rule TO 'user'@'%';
Se in seguito l'amministratore volesse revocare l'accesso al revisore, potrebbe revocare i privilegi utilizzando la seguente istruzione:
REVOKE ALL ON PROCEDURE mysql.cloudql_list_audit_rule FROM 'user'@'%';
Per impostazione predefinita, gli utenti creati utilizzando Cloud SQL (tranne gli utenti IAM) sono amministratori che dispongono di tutti i privilegi tranne FILE
e SUPER
, inclusi tutti i privilegi per le stored procedure di controllo. Per impostazione predefinita, gli utenti
dei database IAM non hanno privilegi.
Abilita il plug-in di audit Cloud SQL per MySQL
Il plug-in di audit Cloud SQL per MySQL (cloudsql_mysql_audit
) controlla il comportamento di controllo per una determinata istanza di database. Per utilizzare il plug-in, devi prima
abilitarlo sull'istanza Cloud SQL.
Per attivare il plug-in cloudsql_mysql_audit
, utilizza una delle seguenti opzioni:
--cloudsql_mysql_audit=ON
Comunica al server di abilitare il plug-in. Se il plug-in non viene inizializzato, il server viene eseguito con il plug-in disabilitato.
--cloudsql_mysql_audit=FORCE
Comunica al server di abilitare il plug-in, ma se l'inizializzazione del plug-in non riesce, il server non viene avviato. In altre parole, questa opzione forza l'esecuzione del server con il plug-in abilitato o non lo esegue.
--cloudsql_mysql_audit=FORCE_PLUS_PERMANENT
Come FORCE, ma impedisce anche l'unload del plug-in durante il runtime. Se un utente cerca di annullare il caricamento del plug-in con DISINSTALLA PLUGIN, si verifica un errore.
Gli stati di attivazione dei plug-in sono visibili nella colonna PLUGIN_STATUS
della tabella INFORMATION_SCHEMA.PLUGINS.
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Apri l'istanza e fai clic su Modifica.
- Scorri verso il basso fino alla sezione Flag.
- Per impostare un flag che non è stato già impostato sull'istanza, fai clic su Aggiungi flag, scegli
cloudsql_mysql_audit
dal menu a discesa e imposta il valore suON
. - Fai clic su Salva per salvare le modifiche.
- Conferma le modifiche in Flag nella pagina Panoramica.
gcloud
Sostituisci quanto segue:
- INSTANCE_NAME: il nome dell'istanza per la quale stai impostando il flag.
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=ON
Questo comando sovrascrive tutti i flag di database impostati in precedenza. Per conservarli e aggiungerne di nuovi, includi i valori di tutti i flag che vuoi impostare sull'istanza. Ogni flag non incluso nello specifico viene impostato sul suo valore predefinito.
Per i flag che non accettano un valore, specifica il nome del flag seguito da un segno di uguale (=
).
REST v1beta4
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- instance-id: l'ID istanza
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
Corpo JSON della richiesta:
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "ON" } ] } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
REST v1
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- instance-id: l'ID istanza
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
Corpo JSON della richiesta:
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "ON" } ] } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
Impostazioni del plug-in di controllo di Cloud SQL per MySQL
Puoi ottimizzare il comportamento del plug-in di audit Cloud SQL per MySQL utilizzando i flag riportati di seguito. Tutti i flag possono essere modificati senza riavviare il database. Per capire come gestire i flag, consulta Configurazione dei flag di database.
cloudsql_mysql_audit_data_masking_regex
Un'espressione regolare utilizzata per il mascheramento dei dati conforme alle espressioni regolari compatibili con Perl (PCRE).
Per impostazione predefinita, nel log di controllo dell'output, le password utente (
<psw>
) vengono sostituite da una maschera per le password di***
.Le espressioni regolari vengono applicate solo alle istruzioni con un tipo di comando specificato utilizzando
cloudsql_mysql_audit_data_masking_cmds
. Quando utilizzigcloud
, devi utilizzare un file di flag per impostare valori con caratteri speciali complessi.Valori predefiniti per questo flag:
identified(?:/\*.*?\*/|\s)*?by(?:/\*.*?\*/|\s)*?(?:password)?(?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?\((?:/\*.*?\*/| \s)*?['|"](?<psw>.*?)(?<!\\)['|"](?:/\*.*?\*/|\s)*?\)|password(?:/\*.*?\*/| \s)*?(?:for(?:/\*.*?\*/|\s)*?\S+?)?(?:/\*.*?\*/|\s)*?=(?:/\*.*?\*/|\s)*?[ '|"](?<psw>.*?)(?<!\\)['|"]|password(?:/\*.*?\*/|\s)*?['|"](?<psw>.*?) (?<!\\)['|"]
Vedi gli esempi che seguono.
Senza
cloudsql_mysql_audit_data_masking_regex
, una voce di audit log che descrive un comando di creazione utente verrebbe visualizzata come segue:{..."cmd":"create_user","query":"create user user1@'localhost' identified by 'pw'"}
Con il valore predefinito di
cloudsql_mysql_audit_data_masking_regex
, lo stesso audit log viene modificato in:{..."cmd":"create_user","query":"create user user1@'localhost' identified by '***'"}
Se imposti
cloudsql_mysql_audit_data_masking_regex
su(?<psw>.*)
, Cloud SQL può filtrare tutti i contenuti delle query.{..."cmd":"create_user","query":"***"}
cloudsql_mysql_audit_data_masking_cmds
Elenco separato da virgole dei comandi a cui viene applicata la regex per il mascheramento dei dati (cloudsql_mysql_audit_data_masking_regex). Imposta una stringa vuota (
""
) per interrompere l'applicazione di filtri. Quando utilizzigcloud
, devi utilizzare un file di segnalazione per impostare un elenco separato da virgole. Il valore predefinito include i comandi MySQL con la seguente clausola per la password:create_user,alter_user,grant,update
cloudsql_mysql_audit_max_query_length
Controlla la lunghezza massima della query da registrare nell'audit log. Se non hai bisogno di visualizzare i dettagli della query, puoi utilizzare
0
, in modo che la query non venga registrata nell'audit log. Ciò consente di risparmiare spazio di archiviazione per il log, riducendo i costi.-1
significa che non ci sono limitazioni. Il valore predefinito è-1
.cloudsql_mysql_audit_log_write_period
Il periodo di scrittura del log, per cui il thread dello scrittore scrive i contenuti del buffer sul disco dopo aver raggiunto il numero di millisecondi impostato per questa opzione di flag o quando il buffer è pieno. Se imposti questo flag su
0
, il thread dell'utente dovrà attendere il completamento della scrittura dal thread dell'autore. Il valore predefinito è500
(millisecondi).
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Apri l'istanza e fai clic su Modifica.
- Scorri verso il basso fino alla sezione Flag.
- Per impostare un flag che non è stato impostato in precedenza sull'istanza, fai clic su Aggiungi flag, scegli un flag di database dall'elenco precedente dal menu a discesa e impostane il valore.
- Fai clic su Salva per salvare le modifiche.
- Conferma le modifiche in Flag nella pagina Panoramica.
gcloud
Sostituisci quanto segue:
- INSTANCE_NAME: il nome dell'istanza per la quale stai impostando il flag.
- FLAG_NAME: il nome del flag di configurazione.
- FLAG_VALUE: il valore da utilizzare per il flag.
gcloud sql instances patch INSTANCE_NAME / --database-flags FLAG_NAME=FLAG_VALUE
REST v1beta4
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- instance-id: l'ID istanza
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
Corpo JSON della richiesta:
{ "settings": { "databaseFlags": [ { "name": "flag_name", "value": "flag_value" } ] } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
REST v1
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- instance-id: l'ID istanza
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/v1/projects/project-id/instances/instance-id
Corpo JSON della richiesta:
{ "settings": { "databaseFlags": [ { "name": "flag_name", "value": "flag_value" } ] } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
Configura il controllo dei database
Gestisci le regole di controllo
Cloud SQL utilizza un insieme di stored procedure per gestire le regole di controllo del plug-in di controllo di Cloud SQL per MySQL. Sono disponibili quattro stored procedure per creare, elencare, aggiornare ed eliminare le regole di controllo.
Ogni stored procedure restituisce due variabili: @outval
e @outmsg
. Queste variabili indicano rispettivamente il codice di stato e il messaggio di errore della procedura archiviata. Puoi utilizzare un asterisco (*
) come carattere jolly per cercare nomi di utenti, host, database e tabelle. Usa l'asterisco come suffisso,
prefisso o entrambi. Inoltre, puoi utilizzare il carattere jolly %
solo per gli organizzatori. Puoi usare l'accento grave (`
) per indicare che una stringa deve essere utilizzata letteralmente. Ad esempio, `ta*ble`
corrisponde
letteralmente.
Per rendere effettive le nuove modifiche, devi eseguire le stored procedure con il parametro di input reload_mode=1
o chiamare mysql.cloudsql_reload_audit_rule(1)
per rendere effettive le nuove modifiche.
Crea regole di controllo
Puoi utilizzare mysql.cloudsql_create_audit_rule
per creare una nuova regola di controllo.
Per creare la regola di controllo e ricaricarla in una chiamata, utilizza la seguente istruzione:
CALL mysql.cloudsql_create_audit_rule('user@host','db','obj','ops','op_result',1, @outval,@outmsg);
SELECT @outval, @outmsg;
Per creare la regola e ricaricarla in una chiamata separata, utilizza la seguente istruzione:
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);
Il comando precedente consente di creare più regole e ricaricare tutte le modifiche contemporaneamente.
Le seguenti tabelle mostrano i parametri di input e di output per il comando precedente.
Parametri di input | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
user@host o user@ip |
string |
L'elenco separato da virgole di utenti del database da controllare. Utilizza il formato user@host o user@ip . |
user1@localhost ,user1@* ,user1@% ,user@ip
|
db |
string | L'elenco separato da virgole dei database da controllare. | db1,db2,db3* |
obj |
string | L'elenco separato da virgole di oggetti di database da controllare. | table1,table2,table3* |
ops |
string | L'elenco separato da virgole di azioni di database da controllare. | select,delete,insert |
op_result |
string | Operazioni riuscite (S), non riuscite (U) o entrambe (B) operazioni riuscite e non riuscite. | S , U o B |
reload_mode |
Numero intero | 0 per non ricaricare la regola e 1 per
ricaricare. |
0 o 1 |
Parametri di output | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
@outval |
int | Il codice di stato della stored procedure. | 0 per la riuscita e 1 per l'esito negativo. |
@outmsg |
string | Il messaggio di errore della stored procedure. |
Le regole di controllo presentano le seguenti limitazioni:
Limitazioni | |
---|---|
Lunghezza di user , db , obj
e ops . |
La dimensione massima è di 2048 caratteri. |
Numero di combinazioni di user , db ,
obj e ops . |
Massimo 1000 combinazioni. Ad esempio, una regola di controllo che verifica
user1,user2 , db1, db2 ,
table1,table2 e select,delete
genera 2 x 2 x 2 x 2 = 16 combinazioni. |
Elenca regole di controllo
I controllori possono utilizzare mysql.cloudsql_list_audit_rule
per elencare le regole di controllo esistenti.
Per elencare le regole di controllo 1 e 2, utilizza i seguenti comandi:
CALL mysql.cloudsql_list_audit_rule('1,2',@outval,@outmsg);
SELECT @outval, @outmsg;
Per elencare tutte le regole di controllo:
CALL mysql.cloudsql_list_audit_rule('*',@outval,@outmsg);
SELECT @outval, @outmsg;
Le seguenti tabelle mostrano i parametri di input e di output per il comando precedente.
Parametri di input | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
rule_id |
string | L'elenco separato da virgole di ID regola da rimuovere. | 1,2,3 |
Parametri di output | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
@outval |
int | Il codice di stato della stored procedure. | 0 per la riuscita e 1 per l'esito negativo. |
@outmsg |
string | Il messaggio di errore della stored procedure. |
Aggiorna le regole di controllo
Puoi utilizzare mysql.cloudsql_update_audit_rule
per aggiornare
una regola di controllo esistente.
Per aggiornare la regola di controllo e ricaricarla in una sola chiamata, utilizza la seguente istruzione:
CALL mysql.cloudsql_update_audit_rule(1,'user@host','db','obj','ops','op_result',1,@outval,@outmsg);
SELECT @outval, @outmsg;
Ti consigliamo di aggiornare più regole di controllo in una sola sessione prima di ricaricarle. Puoi utilizzare la stored procedure riportata di seguito per aggiornare le regole in un passaggio e poi ricaricarle in un passaggio successivo.
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);
Le seguenti tabelle mostrano i parametri di input e di output per il comando precedente.
Parametri di input | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
rule_id |
int | L'ID della regola da aggiornare. | 5 |
user@host |
string |
L'elenco separato da virgole di utenti del database da controllare. Utilizza il formato utente@host. |
user1@localhost,user1@* user1@%
|
db |
string | L'elenco separato da virgole dei database da controllare. | db1,db2,db3* |
obj |
string | L'elenco separato da virgole di oggetti di database da controllare. | table1,table2,table3* |
ops |
string | L'elenco separato da virgole di azioni di database da controllare. | SELECT,DELETE,INSERT |
op_result |
string | Operazioni riuscite (S), non riuscite (U) o entrambe (B) operazioni riuscite e non riuscite. | S , U o B |
reload_mode |
Numero intero | 0 per non ricaricare la regola e 1 per
ricaricare. |
0 o 1 |
Parametri di output | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
@outval |
int | Il codice di stato della stored procedure. | 0 per la riuscita e 1 per l'esito negativo. |
@outmsg |
string | Il messaggio di errore della stored procedure. |
Le regole di controllo presentano le seguenti limitazioni:
Limitazioni | |
---|---|
Lunghezza di user , db , obj
e ops . |
La dimensione massima è 2048 caratteri. |
Numero di combinazioni di user , db ,
obj e ops . |
Massimo 1000 combinazioni. Ad esempio, una regola di controllo che verifica
user1,user2 , db1, db2 ,
table1,table2 e select,delete
genera 2 x 2 x 2 x 2 = 16 combinazioni. |
Elimina regole di controllo
Puoi utilizzare mysql.cloudsql_delete_audit_rule
per eliminare
una regola di controllo esistente.
Per eliminare la regola di controllo e ricaricarla in una sola chiamata, utilizza la seguente istruzione:
CALL mysql.cloudsql_delete_audit_rule('1,2',1,@outval,@outmsg);
SELECT @outval, @outmsg;
Per eliminare la regola e ricaricarla in una chiamata separata, utilizza la seguente istruzione:
CALL mysql.cloudsql_delete_audit_rule('1,2',0,@outval,@outmsg);
SELECT @outval, @outmsg;
CALL cloudsql_reload_audit_rule(1);
Il comando precedente consente di eliminare più regole e di ricaricare tutte le modifiche contemporaneamente.
Le seguenti tabelle mostrano i parametri di input e di output per il comando precedente.
Parametri di input | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
rule_id |
string | L'elenco separato da virgole di ID regola da rimuovere. | 1,2,3 |
reload_mode |
Numero intero | 0 per non ricaricare la regola e 1 per
ricaricare. |
0 o 1 |
Parametri di output | |||
---|---|---|---|
Nome | Tipo | Description | Esempio |
@outval |
int | Il codice di stato della stored procedure. | 0 per la riuscita e 1 per l'esito negativo. |
@outmsg |
string | Il messaggio di errore della stored procedure. |
Gruppi di operazioni
L'audit plug-in di Cloud SQL per MySQL supporta l'uso di gruppi di operazioni nelle definizioni di regole per controllare raccolte di attività. Puoi utilizzare i seguenti gruppi operativi per semplificare la creazione di regole di controllo.
Gruppi di operazioni | Operazioni incluse |
---|---|
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 ,
alter_function , alter_function , alter_function ,
alter_function , alter_function ,
alter_function , alter_function , alter_function
drop_procedure drop_table drop_trigger drop_user drop_view rename_table rename_user
|
dcl |
grant , revoke e 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 |
Visualizza gli audit log del database Cloud SQL
Visualizza i record degli audit log del database in Cloud Logging
Per visualizzare gli audit log del database, assicurati innanzitutto di aver abilitato gli audit log di accesso ai dati per il progetto. Gli audit log di MySQL generati per una determinata istanza vengono inviati a Cloud Logging come audit log di accesso ai dati. Puoi visualizzare gli audit log del database MySQL generati tramite l'applicazione Esplora log.
In Esplora log, puoi visualizzare gli audit log MySQL utilizzando la seguente query per mostrare tutti gli audit log del database MySQL per un determinato progetto Cloud SQL tramite l'interfaccia Filtro avanzato.
Sostituisci quanto segue:
- PROJECT_NAME: il nome del progetto per il quale vuoi eseguire gli audit log.
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"
In alternativa, puoi selezionare il filtro dei log cloudaudit.googleapis.com/data_access.
Formato log di controllo
Un log di controllo include i campi seguenti.
Nome campo | Descrizione | ||||||
---|---|---|---|---|---|---|---|
msgType |
Una stringa per rappresentare il tipo di messaggio dell'audit log.L'unico valore per msgType è activity . |
||||||
status |
Stato dell'operazione: success o
unsuccessful . |
||||||
date |
Un timestamp che indica quando è stato generato l'evento di controllo. | ||||||
threadId |
L'ID del thread MySQL. | ||||||
queryId |
L'ID della query MySQL. | ||||||
user |
Una stringa che rappresenta il nome utente inviato dal client. Potrebbe essere diverso dal valore privUser. | ||||||
privUser |
Una stringa che rappresenta l'utente con cui il server ha autenticato il client. Si tratta del nome utente utilizzato dal server per il controllo dei privilegi. Potrebbe essere diverso dal valore utente. | ||||||
gcpIamAccount |
Una stringa che rappresenta l'account di servizio o l'account IAM della piattaforma Google Cloud. | ||||||
ip |
Una stringa che rappresenta l'indirizzo IP del client. | ||||||
host |
Una stringa che rappresenta il nome host del client. | ||||||
errCode
|
Il codice di errore MySQL per un'operazione non riuscita. Consulta la documentazione di riferimento sui messaggi di errore del server MySQL. | ||||||
cmd |
Una stringa che indica l'istruzione SQL (tipo di operazione) da utilizzare. Ad esempio, INSERT , UPDATE o
DELETE . |
||||||
objects |
Gli oggetti audit. Normalmente si tratta di una tabella. Questo campo include le
seguenti informazioni sull'oggetto:
|
||||||
query |
Un'istruzione SQL (eseguita direttamente). | ||||||
chunkCount |
Numero totale di blocchi se la dimensione della query dell'audit log è superiore a
cloudsql_mysql_audit_event_split_threshold
(90.000). |
||||||
chunkIndex |
Indice del blocco. chunk_index inizia da 1. |
||||||
@type |
Il tipo è sempre type.googleapis.com/google.cloud.sql.audit.v1.MysqlAuditEntry . |
Di seguito è riportato un esempio di voce di audit log.
{
"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"
}
Disabilita il controllo dei database
Per disabilitare il plug-in di audit Cloud SQL per MySQL, puoi impostare il flag di database cloudsql_mysql_audit su OFF o rimuovere il flag.
Console
-
Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.
- Apri l'istanza e fai clic su Modifica.
- Scorri verso il basso fino alla sezione Flag.
- Per impostare un flag che non è stato già impostato sull'istanza, fai clic su Aggiungi flag, scegli
cloudsql_mysql_audit
dal menu a discesa e imposta il valore suOFF
. - Fai clic su Salva per salvare le modifiche.
- Conferma le modifiche in Flag nella pagina Panoramica.
gcloud
Sostituisci quanto segue:
- INSTANCE_NAME: il nome dell'istanza per la quale stai impostando il flag.
gcloud sql instances patch INSTANCE_NAME \ --database-flags cloudsql_mysql_audit=OFF
REST v1beta4
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- instance-id: l'ID istanza
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1beta4/projects/project-id/instances/instance-id
Corpo JSON della richiesta:
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "OFF" } ] } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
REST v1
Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:
- project-id: l'ID progetto
- instance-id: l'ID istanza
Metodo HTTP e URL:
PATCH https://sqladmin.googleapis.com/sql/v1/projects/project-id/instances/instance-id
Corpo JSON della richiesta:
{ "settings": { "databaseFlags": [ { "name": "cloudsql_mysql_audit", "value": "OFF" } ] } }
Per inviare la richiesta, espandi una di queste opzioni:
Dovresti ricevere una risposta JSON simile alla seguente:
Esempi di regole di controllo
Controlla tutte le attività per tutti gli utenti:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
Controlla tutte le attività per un singolo utente
user1
:CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
Controlla tutte le attività per tutti gli utenti che iniziano con
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
Controlla tutte le operazioni DML per tutti gli utenti:
CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
Operazione di selezione del controllo per un database speciale
db1
:CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
Controlla tutte le attività per un database con il carattere speciale
db~1
:CALL mysql.cloudsql_create_audit_rule('*','`db~1`','*','*','B',1,@outval,@outmsg);
Controlla le operazioni di selezione ed eliminazione per la tabella
db1.table1
:CALL mysql.cloudsql_create_audit_rule('*','db1','table1','select,delete','B',1,@outval,@outmsg);
Controlla tutte le operazioni riuscite:
CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
Non controllare tutte le attività per tutti gli utenti che iniziano con
user
:CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','E',1, @outval,@outmsg);
Risolvere i problemi
Problema | Risoluzione dei problemi |
---|---|
Non riesco a visualizzare cloudsql_mysql_audit quando chiamo il
comando:
SHOW (global) variables
|
cloudsql_mysql_audit è il nome del plug-in. Per
verificare se è attivo, utilizza il seguente comando:
SHOW PLUGINS Controlla la voce status .
|
Perché non riesco a visualizzare gli audit log di mysql dopo aver abilitato cloudsql_mysql_audit ? |
Devi abilitare gli audit log di accesso ai dati (come descritto in Configurare gli audit log di accesso ai dati). Inoltre, sono necessarie regole di controllo affinché il plug-in di audit Cloud SQL per MySQL possa controllare gli audit log desiderati. Utilizza le stored procedure con "reload_mode=1" per creare regole di audit oppure esegui il comando seguente o riavvia il database per far funzionare le regole di audit appena aggiunte:
CALL mysql.cloudsql_reload_audit_rule(1) |
Durante l'aggiornamento del flag di database viene visualizzato il seguente errore:
Errore 1193: variabile di sistema sconosciuta "cloudsql_mysql_audit_xxx" |
I flag cloudsql_mysql_audit_xxx funzionano solo quando il plug-in di controllo è attivo. Rimuovi tutti i flag cloudsql_mysql_audit_xxx esistenti dall'istanza, quindi attiva il plug-in utilizzando il seguente comando prima di aggiornare i flag cloudsql_mysql_audit_xxx :
cloudsql_mysql_audit=ON |
Posso visualizzare gli audit log generati anche se non ho impostato alcuna regola di controllo. | Le modifiche alle tabelle delle regole di controllo (mysql.audit_log_rules e mysql.audit_log_rules_expanded ) e alle stored procedure di audit (mysql.cloudsql_xxxx_audit_rule ) vengono registrate per impostazione predefinita. |
Dopo aver apportato modifiche all'istanza principale, non riesco a visualizzare gli audit log sulle istanze di replica. | I thread di replica e i thread di ripristino degli arresti anomali non vengono registrati. Cloud SQL controlla le attività nell'istanza principale, ma non nell'istanza di replica. |
Ho provato a utilizzare il seguente comando per impostare i valori da un elenco separato da virgole, ma non funziona.
gcloud instances patch --database-flags
|
Se specifichi un elenco separato da virgole di valori di flag utilizzando i comandi gcloud , utilizza l'argomento --flags-file . Innanzitutto, devi creare un file con le seguenti
informazioni:
--database-flags: general_log: OFF cloudsql_mysql_audit_max_query_length: '20' cloudsql_mysql_audit_data_masking_cmds: select,update Quindi esegui questo comando: gcloud sql instances patch --flags-file=flagfile |
Il seguente comando restituisce un errore:
CALL mysql.cloudsql_create_canonical_rules
|
Questo è intenzionale. mysql.cloudsql_create_canonical_rules
deve essere chiamato internamente solo da
mysql.cloudsql_create_audit_rule e
mysql.cloudsql_update_audit_rule . |
Quali operazioni posso controllare? |
Le operazioni supportate sono elencate nell'elenco completo delle operazioni supportate. Alcune operazioni, come le seguenti,
non vengono controllate perché non interessano il database:
USE db_name o SHOW VARIABLES Inoltre, in alcuni casi, le funzioni non possono essere controllate come oggetti (funzionalità non supportate). |
Voglio controllare tutte le operazioni su una tabella specifica, quindi ho creato la seguente regola di controllo:
mysql.cloudsql_create_audit_rule("user@*","db",
"table","*","B",1,@1,@2);
Tuttavia, posso visualizzare audit log non correlati a questa tabella, come disconnect e connect .
|
Alcune operazioni, come la disconnessione o la connessione, sono considerate globali. Ignorano i campi di input db e
object . |
Quando creo, aggiorno o elimino una regola di controllo utilizzando stored procedure, viene visualizzato il seguente errore.
Il server MySQL è in esecuzione con l'opzione read-only , quindi non può eseguire questa istruzione.
|
Cloud SQL non può modificare le stored procedure in un'istanza di sola lettura. Se l'istanza è principale, rimuovi i flag read_only . Se l'istanza è un'istanza di replica, apporta le modifiche sull'istanza principale. Dopo che le modifiche alle regole sono state replicate nell'istanza di replica, nell'istanza di replica esegui questo comando per ricaricare le regole nella replica:
CALL mysql.cloudsql_reload_audit_rule(1) |
Quando creo, aggiorno o elimino una regola di controllo, viene visualizzato il seguente errore, anche se la modifica è stata apportata correttamente.
0 rows affected
|
La risposta 0 rows affected si riferisce all'ultima istruzione eseguita nella stored procedure, non alle tabelle. Per verificare se la regola di controllo è stata modificata, utilizza il seguente comando:
mysql.cloudsql_list_audit_rule |
Non posso impostare cloudsql_mysql_audit_data_masking_cmds
e cloudsql_mysql_audit_data_masking_regexp con
gcloud . |
gcloud richiede l'utilizzo dell'argomento --flags-file per impostare valori di flag complessi (i flag che includono caratteri speciali). |
Ho creato una stored procedure utilizzando l'istruzione CREATE USER , ma la password non è mascherata. |
Per impostazione predefinita, il mascheramento funziona solo per cmds (operazioni), ad esempio:
CREATE_USER , ALTER_USER ,
GRANT , UPDATE .
Per filtrare la password durante la creazione della stored procedure, aggiungi create_procedure a
cloudsql_mysql_audit_data_masking_cmds .
|
Ho ricevuto un errore di superamento dell'attesa per il blocco durante il tentativo di creare, aggiornare o eliminare le regole di controllo. | Normalmente, questo errore si verifica quando due o più sessioni tentano di modificare le regole di controllo contemporaneamente. Se questo accade di frequente, aumenta il valore della variabile innodb_lock_wait_timeout . Può essere aumentato a livello globale (utilizzando il flag di database) o solo per la sessione, ad esempio utilizzando il seguente comando:
SET innodb_lock_wait_timeout=120. |
Passaggi successivi
- Scopri di più sul controllo dei database MySQL.
- Consulta l'elenco completo delle operazioni per il controllo dei database.