Sie können eine schreibgeschützte
Cloud SQL for PostgreSQL
-Sitzung mit dem
cloudsql_session_read_only Sitzungsparameter 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 cloudsql_session_read_only Parameter können Sie
die Sitzung vorübergehend oder dauerhaft für die Dauer von
der Sitzung schreibgeschützt machen. Sie können schreibgeschützte Sitzungen dieser Art verwenden, um die Datenintegrität in verschiedenen Kontexten zu schützen, einschließlich Sitzungen, in denen Sie Tools für das Model Context Protocol (MCP), Berichtstools und Auditing-Tools verwenden.
Standardmäßig ist cloudsql_session_read_only auf off gesetzt, wodurch Datenänderungen möglich sind.
Was der schreibgeschützte Modus verhindert
In einer schreibgeschützten Sitzung kann die Datenbank keine Daten ändern. Insbesondere verhindert der Lesemodus Folgendes:
Der schreibgeschützte Modus verhindert die Generierung neuer Transaktions-IDs. Es können keine schreibbaren Transaktionen gestartet werden und daher können keine DML-Anweisungen (Data Manipulation Language, Datenbearbeitungssprache) oder DDL-Anweisungen (Data Definition Language, Datendefinitionssprache) ausgeführt werden. Wenn das Flag jedoch mitten in einer aktiven schreibbaren Transaktion gesetzt wird, können grundlegende DML- und DDL-Anweisungen ausgeführt werden, bis die Transaktion beendet wird.
Der schreibgeschützte Modus verhindert die folgenden Arten von Anweisungen und Aufrufen:
- Anweisungen wie
VACUUMundNOTIFY. - Funktionen mit Nebeneffekten. Das bedeutet, dass Sie keine
FUNCTIONaufrufen oderPROCEDUREausfü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.
- Anweisungen wie
Schreibgeschützten Status konfigurieren
Während einer
Cloud SQL for PostgreSQL
-Sitzung können Sie mit der Anweisung SET den Wert des Flags cloudsql_session_read_only wie folgt ändern:
SET cloudsql_session_read_only = 'on'Mit dieser Anweisung wird die Sitzung schreibgeschützt, sodass niemand Daten ändern kann, solange das Flag auf
ongesetzt ist. Wenn Sie später in der Sitzung wieder Daten ändern möchten, ändern Sie den Wert wieder inoff: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, wird die Sitzung dauerhaft schreibgeschützt. Nachdem das Flag auflockedgesetzt wurde, können Sie es für die Dauer der Sitzung nicht mehr in einen anderen Wert ändern.
Wenn Sie eine Sitzung dauerhaft schreibgeschützt machen möchten, sobald Sie eine Verbindung zur Datenbank herstellen, 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: Der Nutzername 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 schreibgeschützten Sitzungen unterstützt.
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 schreibgeschützt beschränken möchten.
Bestimmte Funktionen in schreibgeschützten Sitzungen aktivieren
- Sie können die Verwendung einer bestimmten
FUNCTIONoderPROCEDUREaktivieren, die sowohl alsVOLATILEals auch alsLANGUAGE CoderLANGUAGE internaldefiniert ist. Fügen Sie dazu der Funktion oder Prozedur einSECURITY LABELhinzu, das aufallowgesetzt ist. - Wenn Sie eine bestimmte Funktion in der Sitzung nicht zulassen möchten, setzen Sie eine
SECURITY LABEL-Anweisung aufdeny. 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 Erweiterung
google_read_only_sessionermöglicht Folgendes:- Alle integrierten volatilen C-Funktionen, die für den schreibgeschützten Modus zulässig sind.
- Alle Funktionen, die für den Lesemodus zulässig sind und aus in der Datenbank geladenen Erweiterungen stammen, einschließlich der Handler-Funktionen für die Sprachen
pl/pgsqlundpl/v8.
Wenn Sie später eine oder mehrere neue Erweiterungen installieren, müssen Sie die Erweiterung
google_read_only_sessionlö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 zweiten BefehlCREATEwerden nur Labels für die volatilen 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.