Saya mencoba untuk memberikan semua hak istimewa pada semua tabel dari database yang diberikan kepada pengguna postgres baru (bukan pemilik). Tampaknya GRANT ALL PRIVILEGES ON DATABASE my_db TO new_user;
tidak melakukan itu. Setelah menjalankan perintah tersebut dengan sukses (sebagai pengguna postgres), saya mendapatkan yang berikut ini sebagai new_user:
$ psql -d my_db
my_db => SELECT * FROM a_table_in_my_db;
ERROR: permission denied for relation a_table_in_my_db
Dua pertanyaan:
1) Apa yang dilakukan oleh perintah di atas, jika tidak memberikan semua izin pada semua tabel di my_db?
2) Apa cara yang tepat untuk memberikan semua izin pada semua tabel kepada pengguna? (termasuk semua tabel yang dibuat di masa depan)
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO your_user;
atau Anda tidak dapat memasukkan catatan apa pun.Dimungkinkan untuk mengatur beberapa login untuk bertindak sebagai pemilik basis data:
create role dbowner nologin
alter database mydb owner dbowner
grant dbowner to user1, user2
Sekarang, jika user1 atau user2 masuk, mereka memiliki semua izin di "mydb" tanpa ada hibah lebih lanjut yang diperlukan.
Namun, saya akan mempertimbangkan solusi ini dengan hati-hati. Sangat menggoda untuk membuat aplikasi web Anda menggunakan salah satu login ini untuk menghindari kesulitan membuat hibah tambahan setiap kali skema diperbarui, tetapi Anda menghapus bentuk perlindungan yang sangat berguna dengan cara ini. Gunakan solusi di atas jika Anda benar-benar ingin beberapa "admin", tetapi tetap dengan pola "beri semua hak istimewa pada semua tabel dalam skema ..." di atas untuk login untuk aplikasi "penggunaan normal" Anda.
sumber