Vous pouvez créer une session
Cloud SQL pour PostgreSQL
en lecture seule à l'aide du paramètre de session
cloudsql_session_read_only. Cette approche est plus robuste
que les options PostgreSQL
en lecture seule standards pour empêcher la modification des données pendant une session. À l'aide du paramètre cloudsql_session_read_only, vous pouvez
rendre la session en lecture seule de manière temporaire ou permanente pendant toute la durée de
la session. Vous pouvez utiliser des sessions en lecture seule de ce type pour protéger l'intégrité des données dans différents contextes, y compris les sessions dans lesquelles vous utilisez des outils MCP (Model Context Protocol), des outils de création de rapports et des outils d'audit.
Par défaut, cloudsql_session_read_only est défini sur off, ce qui autorise la modification des données.
Ce que le mode lecture seule empêche
Dans une session en lecture seule, la base de données ne peut modifier aucune donnée. Plus précisément, le mode lecture seule empêche les opérations suivantes :
Le mode lecture seule empêche la génération de nouveaux ID de transaction. Aucune transaction en écriture ne peut être démarrée. Par conséquent, aucune instruction LMD (langage de manipulation de données) ni LDD (langage de définition de données) ne peut être exécutée. Toutefois, si l'option est définie au milieu d'une transaction en écriture active, les instructions LMD et LDD de base peuvent être exécutées jusqu'à la fin de la transaction.
Le mode lecture seule empêche les types d'instructions et d'appels suivants :
- Instructions telles que
VACUUMetNOTIFY. - Fonctions avec effets secondaires. Cela signifie que vous ne pouvez pas appeler une
FUNCTIONni exécuter unePROCEDUREdéfinie à la fois commeVOLATILEetLANGUAGE CouLANGUAGE internal, car certains de leurs effets secondaires ne nécessitent pas d'ID de transaction. Par exemple,pg_promote(),pg_cancel_backend()etpg_terminate_backend(). - Wrappers de données étrangers.
- Toute fonction ou procédure que vous avez créée dans un langage procédural SQL (PL).
- Instructions telles que
Configurer l'état en lecture seule
Lors d'une session
Cloud SQL pour PostgreSQL, vous pouvez utiliser l'instruction SET pour
modifier la valeur de l'option cloudsql_session_read_only comme suit :
SET cloudsql_session_read_only = 'on'Cette instruction rend la session en lecture seule, empêchant quiconque de modifier les données tant que l'option reste définie sur
on. Pour reprendre la modification des données plus tard dans la session, redéfinissez la valeur suroff:SET cloudsql_session_read_only = 'off'Lorsque l'option est redéfinie sur
off, l'accès en écriture est rétabli dans la session, sauf lorsque l'option est définie surlocked.SET cloudsql_session_read_only = 'locked'Lorsque l'option est définie sur
locked, la session est en lecture seule de manière permanente. Une fois l'option définie surlocked, vous ne pouvez plus la modifier pendant toute la durée de la session.
Pour qu'une session soit en lecture seule de manière permanente dès que vous vous connectez à la base de données, intégrez l'option cloudsql_session_read_only dans la chaîne de connexion de la session :
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?options=-ccloudsql_session_read_only=locked
Effectuez les remplacements suivants :
- USER : nom de l'utilisateur qui crée la session.
- PASSWORD : mot de passe de l'utilisateur.
- HOST : URL de l'hôte.
- PORT : numéro de port.
- DATABASE : nom de la base de données.
Cette approche présente l'avantage supplémentaire que si vous essayez de vous connecter à une ancienne version de Cloud SQL qui n'est pas compatible avec les sessions en lecture seule, la connexion échoue.
Vous pouvez également refuser l'accès en écriture à un utilisateur de base de données spécifique pour toutes les connexions futures, comme suit :
ALTER USER USERNAME SET cloudsql_session_read_only = 'locked';
Remplacez USERNAME par le nom d'utilisateur dont vous souhaitez limiter l'accès à la lecture seule.
Activer des fonctions spécifiques dans les sessions en lecture seule
- Vous pouvez activer l'utilisation d'une
FUNCTIONou d'unePROCEDUREparticulière définie à la fois commeVOLATILEetLANGUAGE CouLANGUAGE internal. Pour ce faire, associez unSECURITY LABELà la fonction ou à la procédure définie surallow. - Pour interdire une fonction particulière dans la session, définissez une instruction
SECURITY LABELsurdeny. Pour autoriser les fonctions qui n'affectent pas l'état global, créez un groupe prédéfini de libellés de sécurité :
CREATE EXTENSION "google_read_only_session"L'extension
google_read_only_sessionpermet les opérations suivantes :- Toutes les fonctions C volatiles intégrées autorisées pour le mode lecture seule.
- Toutes les fonctions autorisées pour le mode lecture seule qui proviennent d'extensions
chargées dans la base de données, y compris les fonctions de gestionnaire pour les langages
pl/pgsqletpl/v8.
Si vous installez une ou plusieurs nouvelles extensions par la suite, pour appliquer des libellés de groupe, supprimez et recréez l'extension
google_read_only_session:> DROP EXTENSION google_read_only_session; > CREATE EXTENSION google_read_only_session;La commande
DROPne supprime aucun libellé existant. La deuxième commandeCREATEajoute simplement des libellés pour les fonctions C volatiles dans la nouvelle extension.
Étape suivante
- En savoir plus sur les options Cloud SQL pour PostgreSQL.
- En savoir plus sur les extensions Cloud SQL pour PostgreSQL.