Utilizzare il controllo del database MySQL

Questo argomento descrive come attivare e utilizzare il plug-in di controllo di Cloud SQL per MySQL. Per una panoramica, consulta Controllo del database MySQL. Per maggiori 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 la sezione Configurare gli audit log di accesso ai dati.

Privilegi richiesti per gli utenti di controllo

Per poterle eseguire, devi disporre dei privilegi EXECUTE sulle procedure archiviate di controllo. Se un amministratore deve modificare i privilegi di accesso di un revisore alle procedure archiviate di controllo, deve utilizzare il comando GRANT o REVOKE nel client mysql. Per informazioni dettagliate sui privilegi utente, consulta Privilegi utente MySQL. Ad esempio, se un amministratore vuole concedere l'accesso a un revisore denominato user per gestire le regole di controllo, può concedere i privilegi utilizzando la seguente dichiarazione:

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

Se in un secondo momento l'amministratore volesse revocare l'accesso all'auditor, potrebbe revocare i privilegi utilizzando la seguente dichiarazione:

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 procedure archiviate di controllo. Per impostazione predefinita, gli utenti del database IAM non dispongono di privilegi.

Attivare 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 attivarlo nell'istanza Cloud SQL.

Per attivare il plug-in cloudsql_mysql_audit, utilizza una delle seguenti opzioni:

  • --cloudsql_mysql_audit=ON

    Indica al server di attivare il plug-in. Se l'inizializzazione del plug-in non riesce, il server viene eseguito con il plug-in disattivato.

  • --cloudsql_mysql_audit=FORCE

    Indica al server di attivare il plug-in, ma se l'inizializzazione del plug-in non riesce, il server non si avvia. In altre parole, questa opzione forza il server a funzionare con il plug-in attivato o non attivato.

  • --cloudsql_mysql_audit=FORCE_PLUS_PERMANENT

    Come FORCE, ma impedisce anche lo scollegamento del plug-in in fase di esecuzione. Se un utente tenta di scaricare il plug-in con UNINSTALL PLUGIN, si verifica un errore.

Gli stati di attivazione dei plug-in sono visibili nella colonna PLUGIN_STATUS della tabella INFORMATION_SCHEMA.PLUGINS.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Apri l'istanza e fai clic su Modifica.
  3. Scorri verso il basso fino alla sezione Flag.
  4. Per impostare un flag che non è stato impostato prima nell'istanza, fai clic su Aggiungi flag, scegli cloudsql_mysql_audit dal menu a discesa e imposta il relativo valore su ON.
  5. Fai clic su Salva per salvare le modifiche.
  6. Conferma le modifiche in Flag nella pagina Panoramica.

gcloud

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza su cui 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. Qualsiasi flag non incluso specificamente viene impostato sul relativo 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, apporta 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, apporta 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 audit 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 Configurare i 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 in uscita, le password utente (<psw>) vengono sostituite da una maschera di password di ***.

    Le espressioni regolari vengono applicate solo alle istruzioni con un tipo di comando specificato utilizzando cloudsql_mysql_audit_data_masking_cmds. Quando utilizzi gcloud, 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 i seguenti esempi.

    • Senza cloudsql_mysql_audit_data_masking_regex, una voce di log di controllo che descrive un comando create user viene visualizzata come segue:

      {..."cmd":"create_user","query":"create user user1@'localhost' identified
      by 'pw'"}
    • Con il valore predefinito cloudsql_mysql_audit_data_masking_regex, lo stesso log di controllo 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 della query.

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

    Elenco separato da virgole di comandi a cui viene applicata la regex di mascheramento dei dati (cloudsql_mysql_audit_data_masking_regex). Imposta una stringa vuota ("") per interrompere il filtro. Quando utilizzi gcloud, devi utilizzare un file di flag per impostare un elenco separato da virgole. Il valore predefinito include i comandi MySQL con la seguente clausola della password:

    create_user,alter_user,grant,update
  • cloudsql_mysql_audit_max_query_length

    Controlla la lunghezza massima della query da registrare nel log di controllo. Se non hai bisogno di visualizzare i dettagli della query, puoi utilizzare 0, che indica che la query non viene registrata nel log di controllo. In questo modo si risparmia spazio di archiviazione per il log, con un conseguente calo dei costi. -1 significa nessuna limitazione. Il valore predefinito è -1.

  • cloudsql_mysql_audit_log_write_period

    Il periodo di scrittura del log, per il quale il thread di scrittura scrive i contenuti del buffer su disco dopo aver raggiunto il numero di millisecondi impostato per questa opzione di flag o quando il buffer è pieno. Se imposti questa opzione di flag su 0, il thread utente è costretto ad attendere una notifica dal thread di scrittura che la scrittura è stata completata. Il valore predefinito è 500 (millisecondi).

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Apri l'istanza e fai clic su Modifica.
  3. Scorri verso il basso fino alla sezione Flag.
  4. Per impostare un flag che non è stato impostato prima nell'istanza, fai clic su Aggiungi flag, scegli un flag di database dall'elenco sopra nel menu a discesa e impostane il valore.
  5. Fai clic su Salva per salvare le modifiche.
  6. Conferma le modifiche in Flag nella pagina Panoramica.

gcloud

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza su cui 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, apporta 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, apporta 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:

Configurare il controllo dei database

Gestire le regole di controllo

Cloud SQL utilizza un insieme di stored procedure per gestire le regole di controllo del plug-in di controllo Cloud SQL per MySQL. Esistono quattro procedure memorizzate che puoi utilizzare per creare, elencare, aggiornare ed eliminare le regole di controllo.

Ogni procedura memorizzata restituisce due variabili: @outval e @outmsg. Queste variabili indicano rispettivamente il codice di stato e il messaggio di errore della procedura memorizzata. Puoi utilizzare un asterisco (*) come carattere jolly per cercare nomi di utenti, host, database e tabelle. Utilizza l'asterisco come suffisso, prefisso o entrambi. Inoltre, puoi utilizzare il carattere jolly % solo per gli host. Puoi utilizzare il carattere backtick (`) per indicare che una stringa deve essere utilizzata in modo letterale. Ad esempio, `ta*ble` corrisponde letteralmente.

Per applicare le nuove modifiche, devi eseguire le procedure archiviate con il parametro di input reload_mode=1 o chiamare mysql.cloudsql_reload_audit_rule(1).

Creare 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 dichiarazione:

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 poi ricaricare tutte le modifiche contemporaneamente.

Le tabelle seguenti mostrano i parametri di input e output per il comando precedente.

Parametri di input
Nome Tipo Descrizione Esempio
user@host o user@ip string L'elenco separato da virgole degli 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 sottoporre ad audit. db1,db2,db3*
obj string L'elenco separato da virgole degli oggetti di database da controllare. table1,table2,table3*
ops string L'elenco separato da virgole delle azioni del database da controllare. select,delete,insert
op_result string Esito positivo (S), negativo (U) o entrambi (B) per le operazioni riuscite e non riuscite. S,U o B
reload_mode Numero intero 0 per non ricaricare la regola e 1 per la ricarica. 0 o 1
Parametri di output
Nome Tipo Descrizione Esempio
@outval int Il codice di stato della stored procedure. 0 per l'esito positivo e 1 per quello negativo.
@outmsg string Il messaggio di errore della stored procedure.

Le regole di controllo presentano i seguenti limiti:

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 controlla user1,user2, db1, db2, table1,table2 e select,delete genera 2 x 2 x 2 x 2 = 16 combinazioni.

Elenca le regole di controllo

Gli auditor 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 tabelle seguenti mostrano i parametri di input e output per il comando precedente.

Parametri di input
Nome Tipo Descrizione Esempio
rule_id string L'elenco separato da virgole degli ID regola da rimuovere. 1,2,3
Parametri di output
Nome Tipo Descrizione Esempio
@outval int Il codice di stato della stored procedure. 0 per l'esito positivo e 1 per quello 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 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 sessione prima di ricaricarle. Puoi utilizzare la seguente procedura memorizzata per aggiornare le regole in un unico 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 tabelle seguenti mostrano i parametri di input e output per il comando precedente.

Parametri di input
Nome Tipo Descrizione Esempio
rule_id int L'ID della regola da aggiornare. 5
user@host string L'elenco separato da virgole degli utenti del database da controllare. Utilizza il formato utente@host.

user1@localhost,user1@*
user1@%
db string L'elenco separato da virgole dei database da sottoporre ad audit. db1,db2,db3*
obj string L'elenco separato da virgole degli oggetti di database da controllare. table1,table2,table3*
ops string L'elenco separato da virgole delle azioni del database da controllare. SELECT,DELETE,INSERT
op_result string Esito positivo (S), negativo (U) o entrambi (B) per le operazioni riuscite e non riuscite. S,U o B
reload_mode Numero intero 0 per non ricaricare la regola e 1 per la ricarica. 0 o 1
Parametri di output
Nome Tipo Descrizione Esempio
@outval int Il codice di stato della stored procedure. 0 per l'esito positivo e 1 per quello negativo.
@outmsg string Il messaggio di errore della stored procedure.

Le regole di controllo presentano i seguenti limiti:

Limitazioni
Lunghezza di user, db, obj e ops. Dimensioni massime: 2048 caratteri.
Numero di combinazioni di user, db, obj e ops. Massimo 1000 combinazioni. Ad esempio, una regola di controllo che controlla user1,user2, db1, db2, table1,table2 e select,delete genera 2 x 2 x 2 x 2 = 16 combinazioni.

Eliminare le 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 dichiarazione:

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 dichiarazione:

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 ricaricare tutte le modifiche contemporaneamente.

Le tabelle seguenti mostrano i parametri di input e output per il comando precedente.

Parametri di input
Nome Tipo Descrizione Esempio
rule_id string L'elenco separato da virgole degli ID regola da rimuovere. 1,2,3
reload_mode Numero intero 0 per non ricaricare la regola e 1 per la ricarica. 0 o 1
Parametri di output
Nome Tipo Descrizione Esempio
@outval int Il codice di stato della stored procedure. 0 per l'esito positivo e 1 per quello negativo.
@outmsg string Il messaggio di errore della stored procedure.

Gruppi di operazioni

Il plug-in di audit Cloud SQL per MySQL supporta l'utilizzo di gruppi di operazioni nelle definizioni delle regole per controllare raccolte di attività. Puoi utilizzare i seguenti gruppi di operazioni per semplificare la creazione delle 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, 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

Visualizzare i log di controllo del database Cloud SQL

Visualizzare i record degli audit log del database in Cloud Logging

Per visualizzare i log di controllo del database, assicurati innanzitutto di aver abilitato i log di controllo dell'accesso ai dati per il tuo progetto. Gli audit log 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 Logs Explorer.

In Esplora log, puoi visualizzare i log di controllo MySQL utilizzando la seguente query per mostrare tutti i log di controllo del database MySQL per un determinato progetto Cloud SQL tramite l'interfaccia Filtro avanzato.

Sostituisci quanto segue:

  • PROJECT_NAME: il nome del progetto per cui vuoi i log di controllo.
    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 log cloudaudit.googleapis.com/data_access.

Formato degli audit log

Un log di controllo contiene i seguenti campi.

Nome campo Descrizione
msgType Una stringa per rappresentare il tipo di messaggio del log di controllo.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. Questo valore 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 IAM o l'account di servizio 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 sezione Descrizione dei 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 di controllo. Di solito una tabella. Questo campo include le seguenti informazioni sull'oggetto:

db Una stringa che rappresenta il nome del database predefinito.
name Una stringa che rappresenta il nome dell'oggetto. Di solito il nome della tabella.
objType Una stringa che rappresenta il tipo di oggetto. Normalmente TABLE.
query Un'istruzione SQL (eseguita direttamente).
chunkCount Numero totale di chunk se la dimensione della query del log di controllo è superiore a cloudsql_mysql_audit_event_split_threshold (90.000).
chunkIndex Indice del chunk. 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 log di controllo.

{
"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"
}

Disattivare il controllo dei database

Per disattivare il plug-in di controllo di Cloud SQL per MySQL, puoi impostare il flag di database cloudsql_mysql_audit su OFF o rimuoverlo.

Console

  1. Nella console Google Cloud, vai alla pagina Istanze Cloud SQL.

    Vai a Istanze Cloud SQL

  2. Apri l'istanza e fai clic su Modifica.
  3. Scorri verso il basso fino alla sezione Flag.
  4. Per impostare un flag che non è stato impostato prima nell'istanza, fai clic su Aggiungi flag, scegli cloudsql_mysql_audit dal menu a discesa e imposta il relativo valore su OFF.
  5. Fai clic su Salva per salvare le modifiche.
  6. Conferma le modifiche in Flag nella pagina Panoramica.

gcloud

Sostituisci quanto segue:

  • INSTANCE_NAME: il nome dell'istanza su cui 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, apporta 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, apporta 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

  1. Controlla tutte le attività per tutti gli utenti:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','B',1,@outval,@outmsg);
  2. Controlla tutte le attività di un singolo utente user1:

    CALL mysql.cloudsql_create_audit_rule('user1@*','*','*','*','B',1,@outval,@outmsg);
  3. Controlla tutte le attività per tutti gli utenti che iniziano con user:

    CALL mysql.cloudsql_create_audit_rule('user*@*','*','*','*','B',1, @outval,@outmsg);
  4. Controlla tutte le operazioni DML per tutti gli utenti:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','dml','B',1,@outval,@outmsg);
  5. Controlla l'operazione di selezione per un database speciale db1:

    CALL mysql.cloudsql_create_audit_rule('*','db1','*','select','B',1,@outval,@outmsg);
  6. 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);
  7. 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);
  8. Controlla tutte le operazioni riuscite:

    CALL mysql.cloudsql_create_audit_rule('*','*','*','*','S',1,@outval,@outmsg);
  9. Non controllare tutte le attività per tutti gli utenti che iniziano con user:

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

Risoluzione dei problemi

Problema Risoluzione dei problemi
Non riesco a vedere cloudsql_mysql_audit quando richiamo 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 vedere i log di controllo di MySQL dopo aver attivato cloudsql_mysql_audit? Devi attivare gli audit log di accesso ai dati (come descritto in Configurare gli audit log di accesso ai dati. Inoltre, le regole di controllo sono necessarie per consentire al plug-in di audit Cloud SQL per MySQL di controllare i log di controllo desiderati. Utilizza le procedure memorizzate con "reload_mode=1" per creare regole di controllo oppure esegui il seguente comando o riavvia il database per attivare le regole di controllo appena aggiunte:

CALL mysql.cloudsql_reload_audit_rule(1)
Quando aggiornò il flag del 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 eventuali 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 vedere gli audit log generati anche se non ho impostato alcuna regola di controllo. Per impostazione predefinita, vengono registrate le modifiche alle tabelle delle regole di controllo (mysql.audit_log_rules e mysql.audit_log_rules_expanded) e alle procedure di controllo archiviate (mysql.cloudsql_xxxx_audit_rule).
Dopo aver apportato modifiche all'istanza principale, non riesco a vedere i log di controllo sulle mie istanze di replica. I thread di replica e di recupero in caso di arresto anomalo non vengono registrati. Cloud SQL controlla le attività nell'istanza principale, ma non nell'istanza 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 di valori di flag separati da virgole 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 il seguente comando:

gcloud sql instances patch --flags-file=flagfile
Il seguente comando restituisce un errore:

CALL mysql.cloudsql_create_canonical_rules
Si tratta di un comportamento previsto. mysql.cloudsql_create_canonical_rules deve essere chiamato solo internamente 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 quelle riportate di seguito, non vengono sottoposte a controllo perché non influiscono sul database:

USE db_name


o

SHOW VARIABLES


Inoltre, in alcuni casi, le funzioni non possono essere controllate come oggetto (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, riesco a vedere audit log non correlati a questa tabella, come disconnect e connect.
Alcune operazioni, come disconnetti o connetti, sono considerate globali. Ignorano i campi di input db e object.
Quando creo, aggiornno o elimino una regola di controllo utilizzando le procedure memorizzate, viene visualizzato il seguente errore.

Il server MySQL è in esecuzione con l'opzione read-only , pertanto 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 è una replica, apporta le modifiche all'istanza principale. Dopo aver replicato le modifiche delle regole nell'istanza di replica, esegui il seguente comando sull'istanza di replica per ricaricare le regole nella replica:
CALL mysql.cloudsql_reload_audit_rule(1)
Quando creo, aggiornno o elimino una regola di controllo, viene visualizzato il seguente errore, anche se la modifica è andata a buon fine.

0 rows affected
La risposta 0 rows affected si riferisce all'ultimo statement eseguito nella procedura memorizzata, non alle tabelle. Per verificare se la regola di controllo è stata modificata, utilizza il seguente comando:

mysql.cloudsql_list_audit_rule
Non riesco a 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 procedura memorizzata utilizzando l'istruzione CREATE USER, ma la password non è mascherata. Per impostazione predefinita, la mascheratura funziona solo per cmds (operazioni), ad esempio:

CREATE_USER, ALTER_USER, GRANT, UPDATE.

Per filtrare la password durante la creazione della procedura memorizzata, aggiungi create_procedure al cloudsql_mysql_audit_data_masking_cmds.
Ho ricevuto un errore di timeout di attesa del blocco superato durante il tentativo di creare, aggiornare o eliminare le regole di controllo. In genere, questo errore si verifica quando due o più sessioni tentano di modificare contemporaneamente le regole di controllo. Se si verifica spesso, aumenta il valore della variabile innodb_lock_wait_timeout. Può essere aumentato a livello globale (utilizzando il flag del database) o solo per la sessione, ad esempio utilizzando il seguente comando:
SET innodb_lock_wait_timeout=120
.

Passaggi successivi