Membuat sesi hanya baca Cloud SQL untuk PostgreSQL

Anda dapat membuat sesi Cloud SQL untuk PostgreSQL hanya baca menggunakan parameter sesi cloudsql_session_read_only. Pendekatan ini adalah cara yang lebih andal untuk mencegah modifikasi data selama sesi daripada opsi hanya baca PostgreSQL standar. Dengan menggunakan parameter cloudsql_session_read_only, Anda dapat membuat sesi hanya baca untuk sementara, atau secara permanen selama durasi sesi. Anda dapat menggunakan sesi hanya baca semacam ini untuk membantu melindungi integritas data dalam berbagai konteks, termasuk sesi saat Anda menggunakan alat Model Context Protocol (MCP), alat pelaporan, dan alat audit.

Secara default, cloudsql_session_read_only disetel ke off, yang memungkinkan modifikasi data.

Yang dicegah oleh mode hanya baca

Dalam sesi hanya baca, database tidak dapat mengubah data apa pun. Secara khusus, mode hanya baca mencegah hal berikut:

  • Mode hanya baca mencegah pembuatan ID transaksi baru. Tidak ada transaksi yang dapat ditulis yang dapat dimulai, dan akibatnya tidak ada instruksi bahasa pengolahan data (DML) atau bahasa definisi data (DDL) yang dapat dieksekusi. Namun, jika tanda ditetapkan di tengah transaksi yang dapat ditulis yang aktif, maka petunjuk DML dan DDL dasar dapat dijalankan hingga transaksi berakhir.

  • Mode hanya baca mencegah jenis pernyataan dan panggilan berikut:

    • Pernyataan seperti VACUUM dan NOTIFY.
    • Fungsi dengan efek samping. Artinya, Anda tidak dapat memanggil FUNCTION atau mengeksekusi PROCEDURE yang ditentukan sebagai VOLATILE dan LANGUAGE C atau LANGUAGE internal, karena beberapa efek sampingnya tidak memerlukan ID transaksi. Contohnya adalah pg_promote(), pg_cancel_backend(), dan pg_terminate_backend().
    • Pembungkus data asing.
    • Fungsi atau prosedur apa pun yang Anda buat dalam bahasa prosedural SQL (PL).

Mengonfigurasi status hanya baca

Selama sesi Cloud SQL untuk PostgreSQL, Anda dapat menggunakan pernyataan SET untuk mengubah nilai flag cloudsql_session_read_only sebagai berikut:

  • SET cloudsql_session_read_only = 'on'

    Pernyataan ini membuat sesi hanya dapat dibaca, sehingga mencegah siapa pun memodifikasi data selama tanda tetap disetel ke on. Untuk melanjutkan pengubahan data nanti dalam sesi, ubah nilai kembali menjadi off:

  • SET cloudsql_session_read_only = 'off'

    Menyetel kembali tanda ke off akan memulihkan akses tulis dalam sesi kecuali jika tanda disetel ke locked.

  • SET cloudsql_session_read_only = 'locked'

    Menetapkan tanda ke locked akan membuat sesi menjadi hanya baca secara permanen. Setelah tanda ditetapkan ke locked, Anda tidak dapat mengubah tanda ke nilai lain selama durasi sesi.

Untuk membuat sesi hanya baca secara permanen segera setelah Anda terhubung ke database, sertakan tanda cloudsql_session_read_only dalam string koneksi sesi:

postgresql://USER:PASSWORD@HOST:PORT/DATABASE?options=-ccloudsql_session_read_only=locked

Lakukan penggantian berikut:

  • USER: nama pengguna yang membuat sesi.
  • PASSWORD: sandi pengguna.
  • HOST: URL host.
  • PORT: nomor port.
  • DATABASE: nama database.

Pendekatan ini memiliki keuntungan tambahan bahwa jika Anda mencoba terhubung ke Cloud SQL versi lama yang tidak mendukung sesi hanya baca, maka koneksi akan gagal.

Anda juga dapat menolak akses tulis ke pengguna database tertentu untuk semua koneksi di masa mendatang, seperti ini:

ALTER USER USERNAME SET cloudsql_session_read_only = 'locked';

Ganti USERNAME dengan nama pengguna yang aksesnya ingin Anda batasi ke hanya baca.

Mengaktifkan fungsi tertentu dalam sesi hanya baca

  • Anda dapat mengizinkan penggunaan FUNCTION atau PROCEDURE tertentu yang ditentukan sebagai VOLATILE dan LANGUAGE C atau LANGUAGE internal. Lakukan ini dengan melampirkan SECURITY LABEL ke fungsi atau prosedur yang ditetapkan ke allow.
  • Untuk melarang fungsi tertentu dalam sesi, tetapkan pernyataan SECURITY LABEL ke deny.
  • Untuk memasukkan fungsi yang tidak memengaruhi status global ke daftar yang diizinkan, buat grup label keamanan yang telah ditentukan sebelumnya:

    CREATE EXTENSION "google_read_only_session"
    

    Ekstensi google_read_only_session memungkinkan hal berikut:

    • Semua fungsi C bawaan yang tidak stabil yang diizinkan untuk mode hanya baca.
    • Semua fungsi yang diizinkan untuk mode hanya baca yang berasal dari ekstensi yang dimuat dalam database, termasuk fungsi handler untuk bahasa pl/pgsql dan pl/v8.

    Jika Anda menginstal satu atau beberapa ekstensi baru setelahnya, untuk menerapkan label grup, hapus dan buat ulang ekstensi google_read_only_session:

    > DROP EXTENSION google_read_only_session;
    > CREATE EXTENSION google_read_only_session;
    

    Perintah DROP tidak menghapus label yang ada. Perintah CREATE kedua hanya menambahkan label untuk fungsi C yang tidak stabil di ekstensi baru.

Langkah berikutnya