Schreibgeschützte Cloud SQL for PostgreSQL-Sitzungen erstellen

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 VACUUM und NOTIFY.
    • Funktionen mit Nebeneffekten. Das bedeutet, dass Sie keine FUNCTION aufrufen oder PROCEDURE ausführen können, die sowohl als VOLATILE als auch als LANGUAGE C oder LANGUAGE internal definiert ist, da für einige ihrer Nebeneffekte keine Transaktions-ID erforderlich ist. Beispiele sind pg_promote(), pg_cancel_backend() und pg_terminate_backend().
    • Fremddaten-Wrapper.
    • Alle Funktionen oder Prozeduren, die Sie in einer prozeduralen SQL-Sprache (PL) erstellt haben.

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 on gesetzt ist. Wenn Sie später in der Sitzung wieder Daten ändern möchten, ändern Sie den Wert wieder in off:

  • SET cloudsql_session_read_only = 'off'

    Wenn Sie das Flag wieder auf off setzen, wird der Schreibzugriff in der Sitzung wiederhergestellt, es sei denn, das Flag ist auf locked gesetzt.

  • SET cloudsql_session_read_only = 'locked'

    Wenn Sie das Flag auf locked setzen, wird die Sitzung dauerhaft schreibgeschützt. Nachdem das Flag auf locked gesetzt 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 FUNCTION oder PROCEDURE aktivieren, die sowohl als VOLATILE als auch als LANGUAGE C oder LANGUAGE internal definiert ist. Fügen Sie dazu der Funktion oder Prozedur ein SECURITY LABEL hinzu, das auf allow gesetzt ist.
  • Wenn Sie eine bestimmte Funktion in der Sitzung nicht zulassen möchten, setzen Sie eine SECURITY LABEL-Anweisung auf deny.
  • 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_session ermö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/pgsql und pl/v8.

    Wenn Sie später eine oder mehrere neue Erweiterungen installieren, müssen Sie die Erweiterung google_read_only_session löschen und neu erstellen, um Gruppenlabels anzuwenden:

    > DROP EXTENSION google_read_only_session;
    > CREATE EXTENSION google_read_only_session;
    

    Mit dem Befehl DROP werden keine vorhandenen Labels entfernt. Mit dem zweiten Befehl CREATE werden nur Labels für die volatilen C-Funktionen in der neuen Erweiterung hinzugefügt.

Nächste Schritte