Alasannya adalah Anda memerlukan hak istimewa tambahan untuk mengakses tampilan atau tabel. Hak istimewa pada database tidak mencakup akses ke semua objek di dalamnya.
Berbeda dengan fungsi:EXECUTE
hak istimewa diberikan kepada public
secara default. Tapi fungsi dijalankan dengan hak istimewa pengguna saat ini. Anda mungkin tertarik dengan SECURITY DEFINER
pengubah untuk CREATE FUNCTION
. Tetapi biasanya cukup dengan memberikan SELECT
pada tabel yang terlibat.
Per dokumentasi tentang hak istimewa default:
Bergantung pada jenis objek, hak istimewa default awal mungkin termasuk memberikan beberapa hak istimewa kepada
PUBLIC
. Standarnya adalah tidak ada akses publik untuk tabel, kolom, skema, dan ruang tabel;CONNECT
hak istimewa danTEMP
hak istimewa pembuatan tabel untuk database;EXECUTE
hak istimewa untuk fungsi; danUSAGE
hak istimewa untuk bahasa.
Anda mungkin tertarik dengan perintah DDL ini (membutuhkan Postgres 9.0 atau lebih baru):
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
Saat terhubung ke database yang bersangkutan, tentu saja (lihat komentar @marcel di bawah), dan sebagai pengguna dengan hak istimewa yang memadai. Anda mungkin juga tertarik dengan pengaturan DEFAULT PRIVILEGES
:
- Berikan semua pada skema tertentu di db ke peran grup di PostgreSQL
Jawaban yang lebih mendetail tentang cara mengelola hak istimewa:
- Bagaimana cara mengelola HAK ISTIMEWA DEFAULT untuk PENGGUNA pada DATABASE vs SCHEMA?
pgAdmin memiliki fitur untuk operasi massal yang lebih canggih:
Atau Anda dapat menanyakan katalog sistem untuk membuat pernyataan DDL untuk pemberian/pencabutan massal ...