Questa pagina descrive come proteggere gli oggetti schema come tabelle, indici e colonne dall'eliminazione accidentale.
Informazioni sulla sicurezza dell'eliminazione degli oggetti dello schema
La protezione dall'eliminazione degli oggetti schema di Spanner si basa sulle statistiche di accesso agli oggetti schema per determinare se è sicuro eliminare un oggetto. Se il sistema determina che l'oggetto non è sicuro, rifiuta la richiesta dell'utente di eliminare l'oggetto schema. L'eliminazione di un oggetto di questo tipo potrebbe causare errori nei job client che accedono ancora all'oggetto. Inoltre, il ripristino di un oggetto eliminato senza incorrere in perdita di dati è molto difficile o impossibile.
A questo scopo, Spanner tiene traccia delle statistiche di accesso per ogni oggetto schema. Questo accesso include inserimenti, aggiornamenti o eliminazioni DML, query SQL, scritture API e letture API. Utilizzando queste statistiche di accesso, Spanner determina se un oggetto schema potrebbe essere ancora in uso. Se un oggetto è stato accessibile di recente, è probabile che sia ancora in uso.
Abilita la protezione da eliminazione degli oggetti dello schema
Per attivare la protezione da caduta, imposta la durata dell'inattività per la protezione da caduta su un valore di durata diverso da zero, ad esempio "24 ore" o "2 giorni". La durata minima è "0s" e quella massima è "7d". Devi impostare la durata dell'inattività su "24 ore" o un periodo più lungo.
Se imposti la durata dell'inattività su "24 ore", puoi eliminare un oggetto schema solo se non è stato eseguito l'accesso all'oggetto nelle ultime 24 ore.
GoogleSQL
Per ulteriori informazioni, consulta ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period="DURATION" )'
Sostituisci quanto segue:
- DATABASE_NAME: il nome del database.
- INSTANCE_ID: l'identificatore dell'istanza del database.
- DURATION: tra "0s" (incluso) e "7d" (incluso). Consigliato: "24 ore".
PostgreSQL
Per ulteriori informazioni, consulta ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME" SET spanner.schema_drop_protection_inactivity_period="DURATION" '
Sostituisci quanto segue:
- DATABASE_NAME: il nome del database.
- INSTANCE_ID: l'identificatore dell'istanza del database.
- DURATION: tra "0s" (incluso) e "7d" (incluso). Consigliato: "24 ore".
Disattiva la protezione da eliminazione degli oggetti dello schema
Per disattivare la protezione dalle cadute, imposta la durata dell'inattività su un valore di durata pari a zero, "0s", o imposta il valore dell'opzione su null.
GoogleSQL
Per ulteriori informazioni, consulta ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_inactivity_period=null )'
Sostituisci quanto segue:
- DATABASE_NAME: il nome del database.
- INSTANCE_ID: l'identificatore dell'istanza del database.
PostgreSQL
Per ulteriori informazioni, consulta ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_inactivity_period=null'
Sostituisci quanto segue:
- DATABASE_NAME: il nome del database.
- INSTANCE_ID: l'identificatore dell'istanza del database.
Precisazioni
La protezione dall'eliminazione degli oggetti dello schema non è attivata nei seguenti scenari:
- Hai creato il database nell'ultima ora.
- Hai creato l'oggetto schema nel periodo di inattività.
- L'oggetto ha accessi in lettura a bassa frequenza (meno di 10 all'ora).
La soglia predefinita di accesso in lettura è 10 all'ora, ma puoi sostituire il valore predefinito utilizzando la seguente opzione del database:
GoogleSQL
Per ulteriori informazioni, consulta ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET OPTIONS ( schema_drop_protection_usage_lowerbound=<threshold> )'
PostgreSQL
Per ulteriori informazioni, consulta ALTER DATABASE.
gcloud spanner databases ddl update DATABASE_NAME \
--instance=INSTANCE_ID \
--ddl='ALTER DATABASE `DATABASE_NAME` SET spanner.schema_drop_protection_usage_lowerbound=<threshold> '
Le statistiche di accesso non vengono raccolte nei seguenti casi:
- Gli accessi non riusciti (query, DML e così via) non vengono conteggiati per l'accesso utente.
- Gli accessi di sistema non vengono conteggiati.
- Gli accessi in scrittura (inclusi inserimenti e aggiornamenti DML) vengono ignorati per gli indici.
- Gli accessi in scrittura vengono ignorati per le colonne generate archiviate.
Risoluzione dei problemi
Se l'eliminazione di un oggetto schema non riesce e non riesci a identificare chi vi accede, consulta quanto segue:
Passaggi successivi
Scopri come impedire l'eliminazione del database.