Benarkah IMPOSSIBLE untuk membuat pengguna cadangan hanya baca di PostgreSQL?
Saya telah dinasihati di saluran IRC bahwa Anda tidak bisa hanya memiliki pengguna cadangan saja tanpa hak kepemilikan. Saya merasa sangat aneh jadi saya ingin memastikan saya tidak melewatkan sesuatu.
Di bawah ini adalah apa yang saya coba tetapi tidak memberi saya hasil yang saya cari. Ketika saya lakukan pg_dump
di meja tertentu saya mendapatkan Permission denied for relation...
:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT ON TABLES TO backup;
GRANT SELECT, USAGE ON ALL SEQUENCES IN SCHEMA public TO backup;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT SELECT, USAGE ON SEQUENCES TO backup;
Bantuan apa pun akan sangat dihargai!
Jawaban:
Tidak, itu mudah (toh sekarang).
Berikan izin koneksi pada pengguna baru
Berikan izin pada semua objek basis data saat ini . Ini khusus skema, dan Anda harus menjalankan satu salinan untuk setiap skema yang Anda inginkan agar pengguna Anda gunakan,
Dari dokumen ,
ALL TABLES
sertakan semua yang Anda inginkan.Kemudian
ALTER DEFAULT PRIVLEGES
untuk memberikan hak istimewa di masa depanSELECT
untuk objek yang belum dibuat.sumber
ALTER DEFAULT PRIVILEGES ... myReadonlyUser
, 2 baris tambahan ditambahkan ke dump:ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM PUBLIC; ALTER DEFAULT PRIVILEGES FOR ROLE root IN SCHEMA public REVOKE ALL ON TABLES FROM root;
. Kedengarannya seperti ini berarti root tidak akan dapat melakukan apa pun di tabel baru. Apakah ini benar?bigint
pengguna hanya baca Anda kemungkinan juga akan perluGRANT SELECT ON ALL SEQUENCES
Cara sederhana dan menyenangkan adalah membuat superuser dengan izin hanya baca.
psql
sebagai postgres atau superuser lainnya.Buat peran pengguna super baru dan atur hanya untuk membaca:
<PASS>
dengan kata sandi pilihan Anda.backadm
dengan nama pengguna yang dipilih. (Saya menempatkanbackadm
untukBackup Administrator
).Anda sekarang dapat menggunakan peran ini untuk membuat cadangan.
sumber
SET SESSION CHARACTERISTICS AS TRANSACTION READ WRITE
atauALTER USER backadm set default_transaction_read_only = off;
jauh dari memiliki akses tidak terbatas ke database.Perhatikan bahwa blog yang dirujuk dalam jawaban yang diberikan oleh @Gyre tidak akan berfungsi untuk membuat "read-only user" aplikasi "(yaitu, untuk membuat peran hanya baca untuk aplikasi web untuk terhubung ke database), dan mungkin membuka serius kerentanan keamanan, karena mudah dielakkan, seperti dijelaskan dalam respons daftar postgresql ini . Untuk referensi, oleh klien mengesampingkan pengaturan sesi:
Rujuk presentasi 'Mengelola hak dalam postgresql' yang ditautkan dalam wiki postgres untuk metode yang lebih terperinci, mirip dengan yang diposkan dalam pertanyaan.
sumber
Setelah menguji kembali dengan solusi Evan Caroll saya menemukan kesalahan ini:
ada satu izin lain yang hilang:
Menambahkan izin ini memungkinkan saya melakukan pencadangan dengan pengguna hanya-baca saya.
sumber
Saya telah melakukan beberapa penelitian yang tepat dan tampaknya TIDAK ada solusi untuk ini. Saya telah menemukan posting blog ini yang dengan sempurna menjelaskan apa yang perlu dilakukan. Saya harap ini membantu orang-orang yang mencari jawaban yang sama seperti saya. Jelas - mengembalikan cadangan yang dilakukan dengan cara ini adalah pertanyaan yang berbeda.
sumber
ALTER USER set default_transaction_read_only = on;
, yang tidak mencegah pengguna mengubahnya.