Jawaban saya mirip dengan yang ini di ServerFault.com .
Menjadi Konservatif
Jika Anda ingin lebih konservatif daripada memberikan "semua hak istimewa", Anda mungkin ingin mencoba sesuatu yang lebih seperti ini.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
Penggunaan public
there mengacu pada nama skema default yang dibuat untuk setiap database / katalog baru. Ganti dengan nama Anda sendiri jika Anda membuat skema.
Akses ke Skema
Untuk mengakses skema sama sekali, untuk tindakan apa pun, pengguna harus diberikan hak "penggunaan". Sebelum pengguna dapat memilih, menyisipkan, memperbarui, atau menghapus, pengguna harus terlebih dahulu diberikan "penggunaan" untuk skema.
Anda tidak akan melihat persyaratan ini saat pertama kali menggunakan Postgres. Secara default, setiap database memiliki skema pertama bernama public
. Dan setiap pengguna secara default telah secara otomatis diberikan hak "penggunaan" untuk skema tertentu itu. Saat menambahkan skema tambahan, Anda harus memberikan hak penggunaan secara eksplisit.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Kutipan dari dokumen Postgres :
Untuk skema, izinkan akses ke objek yang terdapat dalam skema yang ditentukan (dengan asumsi bahwa persyaratan hak istimewa objek juga terpenuhi). Pada dasarnya, ini memungkinkan penerima untuk "mencari" objek dalam skema. Tanpa izin ini, masih mungkin untuk melihat nama objek, misalnya dengan menanyakan tabel sistem. Selain itu, setelah mencabut izin ini, backend yang ada mungkin memiliki pernyataan yang sebelumnya telah melakukan pencarian ini, jadi ini bukan cara yang sepenuhnya aman untuk mencegah akses objek.
Untuk pembahasan lebih lanjut lihat Pertanyaan, Apa sebenarnya yang dilakukan GRANT USAGE ON SCHEMA? . Beri perhatian khusus pada Answer oleh pakar Postgres Craig Ringer .
Objek yang Ada versus Masa Depan
Perintah ini hanya mempengaruhi objek yang ada. Tabel dan semacamnya yang Anda buat di masa mendatang mendapatkan hak istimewa default sampai Anda menjalankan ulang baris di atas. Lihat jawaban lain oleh Erwin Brandstetter untuk mengubah default sehingga mempengaruhi objek masa depan.