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ù efficace
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 di sola lettura temporaneamente 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 audit.
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 nel mezzo di una transazione scrivibile attiva, è possibile eseguire istruzioni DML e DDL di base fino al termine della transazione.
La modalità di sola lettura impedisce i seguenti tipi di istruzioni e chiamate:
- Istruzioni come
VACUUMeNOTIFY. - Funzioni con effetti collaterali. Ciò significa che non puoi chiamare una
FUNCTIONo eseguire unaPROCEDUREdefinita comeVOLATILEeLANGUAGE 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).
- Istruzioni come
Configurare lo stato di sola lettura
Durante una sessione
Cloud SQL per PostgreSQL, puoi utilizzare l'istruzione SET per
modificare il valore del flag cloudsql_session_read_only come segue:
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 la modifica dei dati in un secondo momento nella sessione, riporta il valore suoff: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. Dopo aver impostato il flag sulocked, non puoi modificarlo in nessun 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
Sostituisci quanto segue:
- 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 stai tentando di connetterti a una versione precedente di Cloud SQL che non supporta le sessioni di sola lettura, la connessione non riesce.
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 abilitare l'utilizzo di una
FUNCTIONoPROCEDUREspecifica definita comeVOLATILEeLANGUAGE CoLANGUAGE internal. Per farlo, collega unSECURITY LABELalla funzione o alla procedura impostata suallow. - Per non consentire una funzione specifica 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_sessionabilita quanto segue:- Tutte le funzioni C volatili integrate consentite per la modalità di sola lettura.
- Tutte le funzioni consentite per la modalità di sola lettura che provengono dalle estensioni
caricate nel database, incluse le funzioni di gestione per i linguaggi
pl/pgsqlepl/v8
Se in un secondo momento 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 di Cloud SQL per PostgreSQL.