Puoi creare una sessione Cloud SQL per PostgreSQL di sola lettura utilizzando il parametro di sessione cloudsql_session_read_only. Questo approccio è un modo più solido
per impedire la modifica dei dati durante una sessione rispetto alle opzioni di sola lettura standard di PostgreSQL. Utilizzando il parametro cloudsql_session_read_only, puoi
rendere la sessione temporaneamente di sola lettura o in modo permanente per la durata
della sessione. Puoi utilizzare sessioni di sola lettura di questo tipo
per proteggere l'integrità dei dati in vari contesti, incluse le sessioni in cui
utilizzi strumenti Model Context Protocol (MCP), strumenti di reporting e strumenti di controllo.
Per impostazione predefinita, cloudsql_session_read_only è impostato su off, il che consente
la modifica dei dati.
Cosa impedisce la modalità di sola lettura
In una sessione di sola lettura, il database non può modificare alcun dato. Nello specifico, la modalità di sola lettura impedisce quanto segue:
La modalità di sola lettura impedisce la generazione di nuovi ID transazione. Non è possibile avviare transazioni scrivibili e, di conseguenza, non è possibile eseguire istruzioni DML (Data Manipulation Language) o DDL (Data Definition Language). Tuttavia, se il flag viene impostato a metà di una transazione scrivibile attiva, le istruzioni DML e DDL di base possono essere eseguite fino al termine della transazione.
La modalità di sola lettura impedisce i seguenti tipi di istruzioni e chiamate:
- Dichiarazioni come
VACUUMeNOTIFY. - Funzioni con effetti collaterali. Ciò significa che non puoi chiamare un
FUNCTIONo eseguire unPROCEDUREdefinito sia comeVOLATILEsia comeLANGUAGE CoLANGUAGE internal, perché alcuni dei suoi effetti collaterali non richiedono un ID transazione. Esempi sonopg_promote(),pg_cancel_backend()epg_terminate_backend(). - Wrapper di dati esterni.
- Qualsiasi funzione o procedura creata in un linguaggio procedurale SQL (PL).
- Dichiarazioni come
Configurare lo stato di sola lettura
Durante una sessione di Cloud SQL per PostgreSQL, puoi utilizzare l'istruzione SET per modificare il valore del flag cloudsql_session_read_only nel seguente modo:
SET cloudsql_session_read_only = 'on'Questa istruzione rende la sessione di sola lettura, impedendo a chiunque di modificare i dati finché il flag rimane impostato su
on. Per riprendere a modificare i dati in un secondo momento della sessione, riporta il valore aoff:SET cloudsql_session_read_only = 'off'Se imposti di nuovo il flag su
off, l'accesso in scrittura viene ripristinato nella sessione, tranne quando il flag è impostato sulocked.SET cloudsql_session_read_only = 'locked'Se imposti il flag su
locked, la sessione diventa di sola lettura in modo permanente. Una volta impostato il flag sulocked, non puoi modificarlo con un altro valore per la durata della sessione.
Per rendere una sessione di sola lettura in modo permanente non appena ti connetti al database,
incorpora il flag cloudsql_session_read_only nella stringa di connessione della sessione:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?options=-ccloudsql_session_read_only=locked
Effettua le seguenti sostituzioni:
- USER: il nome utente dell'utente che crea la sessione.
- PASSWORD: la password dell'utente.
- HOST: l'URL host.
- PORT: il numero di porta.
- DATABASE: il nome del database.
Questo approccio ha il vantaggio aggiuntivo che, se tenti di connetterti a una versione precedente di Cloud SQL che non supporta le sessioni di sola lettura, la connessione non va a buon fine.
Puoi anche negare l'accesso in scrittura a un utente del database specifico per tutte le connessioni future, come segue:
ALTER USER USERNAME SET cloudsql_session_read_only = 'locked';
Sostituisci USERNAME con il nome utente dell'utente di cui vuoi limitare l'accesso alla sola lettura.
Abilitare funzioni specifiche nelle sessioni di sola lettura
- Puoi attivare l'utilizzo di un particolare
FUNCTIONoPROCEDUREdefinito comeVOLATILEeLANGUAGE CoLANGUAGE internal. Per farlo, allega unSECURITY LABELalla funzione o alla procedura impostata suallow. - Per non consentire una determinata funzione nella sessione, imposta un'istruzione
SECURITY LABELsudeny. Per consentire le funzioni che non influiscono sullo stato globale, crea un gruppo predefinito di etichette di sicurezza:
CREATE EXTENSION "google_read_only_session"L'estensione
google_read_only_sessionconsente di:- Tutte le funzioni C volatili integrate consentite per la modalità di sola lettura.
- Tutte le funzioni consentite per la modalità di sola lettura provenienti dalle estensioni
caricate nel database, incluse le funzioni di gestione per i linguaggi
pl/pgsqlepl/v8.
Se in seguito installi una o più nuove estensioni, per applicare le etichette di gruppo, elimina e ricrea l'estensione
google_read_only_session:> DROP EXTENSION google_read_only_session; > CREATE EXTENSION google_read_only_session;Il comando
DROPnon rimuove le etichette esistenti. Il secondo comandoCREATEaggiunge solo le etichette per le funzioni C volatili nella nuova estensione.
Passaggi successivi
- Scopri di più sui flag di Cloud SQL per PostgreSQL.
- Scopri di più sulle estensioni Cloud SQL per PostgreSQL.