Anda menemukan cara singkat untuk menyetel hak untuk semua tabel yang ada dalam skema yang diberikan. Manual menjelaskan :
(tapi perhatikan itu ALL TABLES
dianggap termasuk view dan tabel asing ).
Penekanan saya yang berani. serial
kolom diimplementasikan dengan nextval()
on berurutan sebagai default kolom dan, mengutip manual :
Untuk urutan, hak istimewa ini memungkinkan penggunaan fungsi currval
dan nextval
.
Jadi jika ada serial
kolom, Anda juga ingin memberikan USAGE
(atau ALL PRIVILEGES
) pada urutan
GRANT USAGE ON ALL SEQUENCES IN SCHEMA foo TO mygrp;
Catatan: kolom identitas di Postgres 10 atau yang lebih baru menggunakan urutan implisit yang tidak memerlukan hak istimewa tambahan. (Pertimbangkan untuk mengupgrade serial
kolom.)
Bagaimana dengan objek baru ?
Anda juga akan tertarik DEFAULT PRIVILEGES
untuk pengguna atau skema :
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT USAGE ON SEQUENCES TO staff;
ALTER DEFAULT PRIVILEGES IN SCHEMA foo REVOKE ...;
Ini menetapkan hak istimewa untuk objek yang dibuat di masa mendatang secara otomatis - tetapi tidak untuk objek yang sudah ada sebelumnya.
Hak istimewa default hanya diterapkan ke objek yang dibuat oleh pengguna yang ditargetkan ( FOR ROLE my_creating_role
). Jika klausa itu dihilangkan, defaultnya adalah pengguna saat ini yang mengeksekusi ALTER DEFAULT PRIVILEGES
. Untuk lebih eksplisit:
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo GRANT ...;
ALTER DEFAULT PRIVILEGES FOR ROLE my_creating_role IN SCHEMA foo REVOKE ...;
Perhatikan juga bahwa semua versi pgAdmin III memiliki bug halus dan menampilkan hak istimewa default di panel SQL, meskipun tidak berlaku untuk peran saat ini. Pastikan untuk menyesuaikan FOR ROLE
klausa secara manual saat menyalin skrip SQL.
ALTER DEFAULT PRIVILEGES IN SCHEMA foo GRANT ALL PRIVILEGES ON TABLES TO staff;
bagaimana cara mengetahui database apa?SCHEMA foo
bisa ada di database yang berbeda?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 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.
sumber