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
VACUUMdanNOTIFY. - Fungsi dengan efek samping. Artinya, Anda tidak dapat memanggil
FUNCTIONatau mengeksekusiPROCEDUREyang ditentukan sebagaiVOLATILEdanLANGUAGE CatauLANGUAGE internal, karena beberapa efek sampingnya tidak memerlukan ID transaksi. Contohnya adalahpg_promote(),pg_cancel_backend(), danpg_terminate_backend(). - Pembungkus data asing.
- Fungsi atau prosedur apa pun yang Anda buat dalam bahasa prosedural SQL (PL).
- Pernyataan seperti
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 menjadioff:SET cloudsql_session_read_only = 'off'Menyetel kembali tanda ke
offakan memulihkan akses tulis dalam sesi kecuali jika tanda disetel kelocked.SET cloudsql_session_read_only = 'locked'Menetapkan tanda ke
lockedakan membuat sesi menjadi hanya baca secara permanen. Setelah tanda ditetapkan kelocked, 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
FUNCTIONatauPROCEDUREtertentu yang ditentukan sebagaiVOLATILEdanLANGUAGE CatauLANGUAGE internal. Lakukan ini dengan melampirkanSECURITY LABELke fungsi atau prosedur yang ditetapkan keallow. - Untuk melarang fungsi tertentu dalam sesi, tetapkan pernyataan
SECURITY LABELkedeny. 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_sessionmemungkinkan 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/pgsqldanpl/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
DROPtidak menghapus label yang ada. PerintahCREATEkedua hanya menambahkan label untuk fungsi C yang tidak stabil di ekstensi baru.
Langkah berikutnya
- Pelajari lebih lanjut tanda Cloud SQL untuk PostgreSQL.
- Pelajari lebih lanjut ekstensi Cloud SQL untuk PostgreSQL.