Controllo dei database MySQL

Questo argomento descrive il controllo dei database di Cloud SQL per MySQL e il plug-in di audit Cloud SQL per MySQL. Per utilizzare ora il controllo dei database, consulta Utilizzare il controllo dei database MySQL.

Che cos'è il controllo dei database?

Il controllo del database consente di tenere traccia di azioni utente specifiche nel database, come aggiornamenti delle tabelle, lettura di query, concessioni di privilegi utente e altro ancora. Il controllo dei database è utile per le organizzazioni che devono avere una traccia delle attività utente per motivi di sicurezza o per rispettare varie normative finanziarie, governative e ISO. Il controllo dei database è supportato per Cloud SQL per MySQL 5.7 e 8.0.

Plug-in per audit di Cloud SQL per MySQL

Il controllo dei database è abilitato dal plug-in di audit Cloud SQL per MySQL o cloudsql_mysql_audit. Questo plug-in utilizza l'API di controllo MySQL aperta per monitorare e registrare l'attività in MySQL. Il plug-in invia i log agli audit log degli accessi ai dati di Cloud Logging. Gli audit log di accesso ai dati sono disabilitati per impostazione predefinita perché possono essere molto grandi. Devi abilitare esplicitamente i log per utilizzare il plug-in.

Quando il plug-in è attivo, le regole di controllo esistenti che hai creato vengono applicate per generare log di controllo per il database. Quando il plug-in viene disattivato, non vengono generati audit log.

Per ulteriori informazioni sui plug-in MySQL, consulta la pagina relativa ai plug-in di server MySQL.

Chi utilizza il controllo dei database?

Esistono tre tipi di utenti coinvolti nel controllo dei database:

  • Amministratori: utenti che amministrano il database. Gli amministratori sono gli utenti di controllo responsabili dell'abilitazione e della disattivazione del controllo per l'istanza e della creazione di nuovi utenti. Concede inoltre ai revisori l'autorizzazione per la revisione. Gli amministratori possono anche creare, eliminare e aggiornare le regole di controllo.
  • Auditor: utenti con l'autorizzazione per creare, eliminare e aggiornare le regole di controllo. L'accesso viene concesso agli amministratori.
  • Clienti: utenti la cui attività viene controllata tramite le regole di controllo, ma che non sono utenti di controllo e non hanno privilegi amministrativi o di controllo. Il loro accesso è regolato dagli amministratori.

Gli amministratori e i revisori sono chiamati anche utenti audit.

Regole di controllo

Il controllo dei database utilizza le regole di controllo per definire le combinazioni di utenti, database, oggetti, operazioni e stati che dovrebbero attivare la creazione di un log di controllo. Una regola di controllo contiene le seguenti informazioni:

  • Id: identificatore automatico della regola. A ogni regola di controllo è assegnato automaticamente un ID controllo. Una volta creato, l'ID controllo non può essere modificato.
  • Nome utente: elenco di utenti e/o pattern di caratteri jolly separati da virgole. Puoi utilizzare gli asterischi (*) come caratteri jolly sia per l'utente che per l'host. Utilizza l'asterisco come suffisso, prefisso o entrambi. Inoltre, gli utenti possono utilizzare il carattere jolly % solo per l'host. Il massimo è 2048 caratteri.
  • NomeDB: elenco separato da virgole di nomi di database e/o pattern di caratteri jolly. Puoi utilizzare gli asterischi (*) come caratteri jolly sia per l'utente sia per l'host. Utilizza l'asterisco come suffisso, prefisso o entrambi. Il limite massimo è di 2048 caratteri.
  • Oggetto: elenco separato da virgole di oggetti di database (tabelle, funzioni, procedure archiviate e così via) nomi e/o pattern di caratteri jolly. Puoi utilizzare gli asterischi (*) come caratteri jolly sia per l'utente che per l'host. Utilizza l'asterisco come suffisso, prefisso o entrambi. Il limite massimo è di 2048 caratteri.
  • Operazione: elenco separato da virgole di operazioni di database. Il plug-in supporta operazioni di gruppo (come DDL, DML e così via), singole operazioni (come aggiornamento, eliminazione e così via) e caratteri jolly (*) per tutte le operazioni. Consulta l'elenco completo delle operazioni supportate. Il plug-in supporta anche i gruppi di operazioni che puoi utilizzare per controllare un gruppo di operazioni. Il limite massimo è di 2048 caratteri.
  • Op_result: il risultato dell'operazione.

    • S per il controllo delle operazioni riuscite
    • U per il controllo delle operazioni non riuscite
    • B per il monitoraggio delle operazioni riuscite e non riuscite
    • E per la creazione di regole esclusive

Tipi di operazioni

I tipi di operazioni sono i vari tipi di attività o operazioni che puoi controllare nel database:

  • DQL: legge i dati del database (ovvero le istruzioni SELECT)
  • DML - Aggiungi, elimina o modifica dati
  • DDL - Crea o modifica la struttura degli oggetti del database nel database
  • DCL - Gestisci i privilegi per gli utenti nel database
  • Show - Descrivi le obiezioni relative al database o indica lo stato del database
  • Call - Richiama una stored procedure

Considerazioni sull'audit logging

Backup

Quando ripristini un'istanza da un backup o dal recupero point-in-time (PITR), anche le regole di controllo eseguono il rollback al momento del backup o del PITR. Questo accade perché le regole di controllo fanno parte dei dati archiviati nel database, così come le destinazioni (utenti e oggetti) che la regola sta controllando.

Repliche di lettura

Le regole di controllo vengono automaticamente replicate da un'istanza principale nelle relative repliche di lettura. I clienti non possono aggiungere, rimuovere o modificare le regole di controllo sulle repliche di lettura. Se vuoi modificare le regole di controllo per una replica, devi aggiornare quelle dell'istanza principale.

Se aggiorni le regole di audit log nell'istanza principale, devi ricaricare la regola di controllo sulla replica per assicurarti che le nuove regole di controllo vengano aggiornate anche nelle repliche di lettura. Il seguente comando ricarica la regola di controllo:

CALL mysql.cloudsql_reload_audit_rule(1)

Gli utenti possono abilitare l'audit logging sulle repliche, indipendentemente dall'istanza principale. Dopo aver apportato modifiche all'istanza principale, devi eseguire il comando di ricarica o riavviare l'istanza di replica per rendere efficaci le regole di audit log.

Disponibilità del database durante errore dell'audit log

Se un'operazione di controllo non va a buon fine, Cloud SQL non impedisce il completamento dell'attività del database. Ad esempio, quando un'istanza esaurisce lo spazio su disco e Cloud SQL non può generare un audit log, il database consente comunque all'utente di eseguire query di lettura, anche se questa attività normalmente genera un audit log.

Istanze di sola lettura

Se un'istanza ha il flag read_only impostato su true, non puoi aggiungere o aggiornare le regole di controllo perché sono archiviate nelle tabelle. Prima di poter creare, aggiornare o eliminare le regole, devi rimuovere il flag read_only.

Limitazioni e problemi noti

Applica log binari

Il plug-in di audit di Cloud SQL per MySQL non è compatibile con i log binari su un'istanza.

In alcuni casi, se provi ad applicare log binari mentre è abilitato il plug-in di controllo Cloud SQL per MySQL, l'istanza del database potrebbe causare l'arresto anomalo.

Se vuoi applicare log binari utilizzando l'utilità mysqlbinlog, devi prima disabilitare il controllo del database impostando cloudsql_mysql_audit=OFF.

Frequenza di importazione dei log

Prima che Cloud SQL invii gli audit log a Cloud Logging, vengono scritti temporaneamente sul disco dell'istanza, utilizzando spazio su disco. I log vengono caricati in Cloud Logging e rimossi dal disco a una velocità di 4 MB al secondo. Quando il carico proveniente dalla generazione dei log supera la velocità di caricamento, l'istanza subisce un aumento dell'utilizzo del disco, il che può causare l'esaurimento del disco e l'arresto anomalo del database. Anche se sono abilitati aumenti automatici dello spazio di archiviazione su disco, l'aumento dell'utilizzo del disco aumenta i costi.

Durante l'utilizzo di questa funzione, ti consigliamo di:

  • Abilita gli aumenti automatici dello spazio di archiviazione.
  • Monitorare l'utilizzo complessivo del disco. Non puoi monitorare separatamente il carico proveniente dalla generazione dei log. Utilizza la metrica cloudsql.googleapis.com/database/disk/utilization in Metrics Explorer.
  • Se necessario, riduci la frequenza di generazione dei log limitando l'attività del database o riducendo i controlli.

Controlla le operazioni non riuscite

Se le regole di controllo includono il controllo per le operazioni non riuscite (op_result è impostato su U per le operazioni non riuscite o su B per entrambe le operazioni non riuscite e riuscite), alcuni utenti potrebbero riuscire a sovraccaricare l'istanza di database con gli audit log eseguendo continuamente operazioni non riuscite. Se la velocità di generazione dei log supera quella di importazione dei log, potrebbe verificarsi una crescita indesiderata dell'utilizzo del disco, che esaurisce lo spazio su disco. Quando invece controlli le operazioni non riuscite:

  • Controlla l'accesso a livello di istanza.
  • Configura un sistema di monitoraggio o avviso per l'aumento anomalo dei log delle operazioni non riuscite.

Regole di controllo

Non puoi creare più di 1000 combinazioni di regole di controllo per istanza di database. Una combinazione di regole di controllo è un insieme univoco di utenti, database, oggetti e operazioni. Ad esempio, una regola di controllo che verifica user1,user2, db1,db2, table1,table2, select,delete genera 2 x 2 x 2 x 2 = 16 combinazioni. La creazione o l'aggiornamento delle regole di controllo non riesce se il numero totale di combinazioni di regole di controllo supera 1000.

Operazioni non supportate

Al momento le seguenti operazioni non sono supportate.

  • Le seguenti funzioni non sono supportate se utilizzate come descritto:

    • All'interno di SELECT query con UNION, INTERSECT, la clausola WHERE, query nidificate, sottoquery e così via
    • Nelle istruzioni UPDATE, DELETE, INSERT e REPLACE.

    Ad esempio, se hai una regola di controllo per controllare l'oggetto func1, non vengono controllati quanto segue:

    • SELECT func1() FROM table;
    • SELECT * FROM table WHERE a = func1();
    • SELECT func1() != 0;
    • SELECT func1() > 0;
    • SET @x = func1();

    Una funzione chiamata direttamente da SELECT senza operatori e senza clausola WHERE viene controllata:

    • SELECT func1();
    • SELECT db.func1();
  • Il filtro per indirizzo IP non è al momento supportato.

Passaggi successivi