Sie können eine schreibgeschützte Cloud SQL for PostgreSQL-Sitzung mit dem Sitzungsparameter cloudsql_session_read_only erstellen. Dieser Ansatz ist eine robustere Methode, um Datenänderungen während einer Sitzung zu verhindern, als die standardmäßigen schreibgeschützten Optionen von PostgreSQL. Mit dem Parameter cloudsql_session_read_only können Sie die Sitzung vorübergehend oder dauerhaft für die Dauer der Sitzung schreibgeschützt machen. Sie können schreibgeschützte Sitzungen dieser Art verwenden, um die Datenintegrität in verschiedenen Kontexten zu schützen, z. B. in Sitzungen, in denen Sie MCP-Tools (Model Context Protocol), Berichts- und Audit-Tools verwenden.
Standardmäßig ist cloudsql_session_read_only auf off festgelegt, was die Datenänderung ermöglicht.
Was der schreibgeschützte Modus verhindert
In einer schreibgeschützten Sitzung kann die Datenbank keine Daten ändern. Im Lesemodus ist Folgendes nicht möglich:
Im Lesemodus können keine neuen Transaktions-IDs generiert werden. Es können keine schreibbaren Transaktionen gestartet werden. Daher können keine DML-Anweisungen (Data Manipulation Language, Datenbearbeitungssprache) oder DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) ausgeführt werden. Wenn das Flag jedoch in der Mitte einer aktiven schreibbaren Transaktion festgelegt wird, können grundlegende DML- und DDL-Anweisungen bis zum Ende der Transaktion ausgeführt werden.
Im Lesemodus sind die folgenden Arten von Anweisungen und Aufrufen nicht möglich:
- Aussagen wie
VACUUMundNOTIFY. - Funktionen mit Nebeneffekten Das bedeutet, dass Sie keine
FUNCTIONaufrufen oder keinePROCEDUREausführen können, die sowohl alsVOLATILEals auch alsLANGUAGE CoderLANGUAGE internaldefiniert ist, da für einige ihrer Nebeneffekte keine Transaktions-ID erforderlich ist. Beispiele sindpg_promote(),pg_cancel_backend()undpg_terminate_backend(). - Fremddaten-Wrapper.
- Alle Funktionen oder Prozeduren, die Sie in einer prozeduralen SQL-Sprache (PL) erstellt haben.
- Aussagen wie
Schreibgeschützten Status konfigurieren
Während einer
Cloud SQL for PostgreSQL-Sitzung
können Sie mit der SET-Anweisung den Wert des cloudsql_session_read_only-Flags so ändern:
SET cloudsql_session_read_only = 'on'Mit dieser Anweisung wird die Sitzung schreibgeschützt. Solange das Flag auf
ongesetzt ist, kann niemand Daten ändern. Wenn Sie die Daten später in der Sitzung wieder ändern möchten, ändern Sie den Wert zurück zuoff:SET cloudsql_session_read_only = 'off'Wenn Sie das Flag wieder auf
offsetzen, wird der Schreibzugriff in der Sitzung wiederhergestellt, es sei denn, das Flag ist auflockedgesetzt.SET cloudsql_session_read_only = 'locked'Wenn Sie das Flag auf
lockedsetzen, ist die Sitzung dauerhaft schreibgeschützt. Nachdem das Flag auflockedgesetzt wurde, können Sie es für die Dauer der Sitzung nicht mehr ändern.
Wenn Sie eine Sitzung sofort nach dem Herstellen der Verbindung zur Datenbank dauerhaft schreibgeschützt machen möchten, betten Sie das Flag cloudsql_session_read_only in den Verbindungsstring der Sitzung ein:
postgresql://USER:PASSWORD@HOST:PORT/DATABASE?options=-ccloudsql_session_read_only=locked
Ersetzen Sie die folgenden Werte:
- USER ist der Name des Nutzers, der die Sitzung erstellt.
- PASSWORD: Das Passwort des Nutzers.
- HOST: die Host-URL.
- PORT: die Portnummer.
- DATABASE: Der Datenbankname.
Dieser Ansatz hat den zusätzlichen Vorteil, dass die Verbindung fehlschlägt, wenn Sie versuchen, eine Verbindung zu einer älteren Version von Cloud SQL herzustellen, die keine Unterstützung für schreibgeschützte Sitzungen bietet.
Sie können einem bestimmten Datenbanknutzer auch den Schreibzugriff für alle zukünftigen Verbindungen verweigern:
ALTER USER USERNAME SET cloudsql_session_read_only = 'locked';
Ersetzen Sie USERNAME durch den Nutzernamen des Nutzers, dessen Zugriff Sie auf „Nur lesen“ beschränken möchten.
Bestimmte Funktionen in schreibgeschützten Sitzungen aktivieren
- Sie können die Verwendung einer bestimmten
FUNCTIONoderPROCEDUREaktivieren, die alsVOLATILEundLANGUAGE CoderLANGUAGE internaldefiniert ist. Dazu hängen Sie einSECURITY LABELan die Funktion oder Prozedur an, die aufallowfestgelegt ist. - Wenn Sie eine bestimmte Funktion in der Sitzung nicht zulassen möchten, legen Sie eine
SECURITY LABEL-Anweisung aufdenyfest. Wenn Sie Funktionen auf die Zulassungsliste setzen möchten, die sich nicht auf den globalen Status auswirken, erstellen Sie eine vordefinierte Gruppe von Sicherheitslabels:
CREATE EXTENSION "google_read_only_session"Die
google_read_only_session-Erweiterung ermöglicht Folgendes:- Alle integrierten flüchtigen C-Funktionen, die für den schreibgeschützten Modus zulässig sind.
- Alle Funktionen, die für den Lesemodus zulässig sind und aus Erweiterungen stammen, die in der Datenbank geladen wurden, einschließlich der Handlerfunktionen für die Sprachen
pl/pgsqlundpl/v8.
Wenn Sie später eine oder mehrere neue Erweiterungen installieren, müssen Sie die
google_read_only_session-Erweiterung löschen und neu erstellen, um Gruppenlabels anzuwenden:> DROP EXTENSION google_read_only_session; > CREATE EXTENSION google_read_only_session;Mit dem Befehl
DROPwerden keine vorhandenen Labels entfernt. Mit dem zweitenCREATE-Befehl werden nur Labels für die flüchtigen C-Funktionen in der neuen Erweiterung hinzugefügt.
Nächste Schritte
- Weitere Informationen zu Cloud SQL for PostgreSQL-Flags
- Weitere Informationen zu Cloud SQL for PostgreSQL-Erweiterungen