Berikan penggunaan / pilih ke satu tabel
Jika Anda hanya memberikan CONNECT ke database, pengguna dapat terhubung tetapi tidak memiliki hak istimewa lainnya. Anda harus memberikan PENGGUNAAN pada ruang nama (skema) dan PILIH pada tabel dan tampilan secara individual seperti:
GRANT CONNECT ON DATABASE mydb TO xxx;
-- This assumes you're actually connected to mydb..
GRANT USAGE ON SCHEMA public TO xxx;
GRANT SELECT ON mytable TO xxx;
Beberapa tabel / tampilan (PostgreSQL 9.0+)
Dalam versi terbaru PostgreSQL, Anda dapat memberikan izin pada semua tabel / tampilan / dll dalam skema menggunakan perintah tunggal daripada harus mengetiknya satu per satu:
GRANT SELECT ON ALL TABLES IN SCHEMA public TO xxx;
Ini hanya memengaruhi tabel yang sudah dibuat. Lebih kuat, Anda dapat secara otomatis memiliki peran default yang ditetapkan untuk objek baru di masa depan:
ALTER DEFAULT PRIVILEGES IN SCHEMA public
GRANT SELECT ON TABLES TO xxx;
Perhatikan bahwa secara default ini hanya akan mempengaruhi objek (tabel) yang dibuat oleh pengguna yang mengeluarkan perintah ini: meskipun juga dapat ditetapkan pada peran apa pun yang menjadi anggota pengguna yang mengeluarkan. Namun, Anda tidak mengambil hak default untuk semua peran yang menjadi anggota Anda saat membuat objek baru ... jadi masih ada beberapa hal yang perlu dilakukan. Jika Anda mengadopsi pendekatan yang memiliki peran sebagai basis data, dan perubahan skema dilakukan sebagai peran tersebut, maka Anda harus menetapkan hak default untuk peran tersebut. IMHO ini semua agak membingungkan dan Anda mungkin perlu bereksperimen untuk menghasilkan alur kerja fungsional.
Beberapa tabel / tampilan (versi PostgreSQL sebelum 9.0)
Untuk menghindari kesalahan dalam perubahan multi-tabel yang panjang, disarankan untuk menggunakan proses 'otomatis' berikut untuk menghasilkan yang diperlukan GRANT SELECT
untuk setiap tabel / tampilan:
SELECT 'GRANT SELECT ON ' || relname || ' TO xxx;'
FROM pg_class JOIN pg_namespace ON pg_namespace.oid = pg_class.relnamespace
WHERE nspname = 'public' AND relkind IN ('r', 'v', 'S');
Ini harus menampilkan perintah GRANT yang relevan ke GRANT SELECT pada semua tabel, tampilan, dan urutan di depan umum, untuk cinta salin-tempel. Secara alami, ini hanya akan diterapkan ke tabel yang sudah dibuat.