Saya mencoba menjalankan perintah sql sederhana:
select * from site_adzone;
dan saya mendapat kesalahan ini
ERROR: permission denied for relation site_adzone
Apa yang bisa menjadi masalah di sini?
Saya mencoba juga untuk melakukan pilih untuk tabel lain dan mendapatkan masalah yang sama. Saya juga mencoba melakukan ini:
GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
tapi saya mendapat respons ini dari konsol
WARNING: no privileges were granted for "jerry"
Apakah Anda tahu apa yang salah?
Jawaban:
PEMBERITAHUAN pada database bukanlah yang Anda butuhkan. Berikan langsung di atas meja.
Pemberian hak istimewa pada database sebagian besar digunakan untuk memberikan atau mencabut hak koneksi. Ini memungkinkan Anda untuk menentukan siapa yang dapat melakukan hal-hal dalam database jika mereka memiliki izin lain yang memadai.
Yang Anda inginkan:
Ini akan menangani masalah ini.
sumber
Posting Ron E jawaban untuk hak istimewa di semua tabel karena mungkin bermanfaat bagi orang lain.
sumber
ALL SEQUENCES
danALL FUNCTIONS
.ALL TABLES
juga termasuk pandangan, jadi tidak adaALL VIEWS
perintah terpisah :-)Sambungkan ke database yang benar terlebih dahulu , kemudian jalankan:
sumber
\connect databasename;
sumber
Langkah pertama dan penting adalah terhubung ke db Anda:
2 langkah, berikan hak istimewa
sumber
Untuk memberikan izin ke semua tabel yang ada dalam skema, gunakan:
Untuk menentukan izin default yang akan diterapkan ke tabel di masa depan gunakan:
misalnya
Jika Anda menggunakan
SERIAL
atauBIGSERIAL
kolom maka Anda mungkin ingin melakukan hal yang sama untukSEQUENCES
, atau AndaINSERT
akan gagal ( Postgres 10'sIDENTITY
tidak menderita dari masalah itu, dan direkomendasikan padaSERIAL
jenisnya), yaituLihat juga jawaban saya untuk Izin PostgreSQL untuk Aplikasi Web untuk detail lebih lanjut dan skrip yang dapat digunakan kembali.
Ref:
HIBAH
ALTER DEFAULT PRIVILEGES
sumber
Ini sering terjadi ketika Anda membuat tabel sebagai postgres pengguna dan kemudian mencoba mengaksesnya sebagai pengguna biasa. Dalam hal ini yang terbaik adalah login sebagai pengguna postgres dan ubah kepemilikan tabel dengan perintah:
sumber
Pastikan Anda masuk ke psql sebagai pemilik tabel. untuk mencari tahu siapa pemilik tabel yang digunakan
\dt
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
maka Anda dapat menjalankan GRAN
sumber
Saat Anda mencari izin pilih, saya sarankan agar Anda hanya memberikan izin pilih daripada semua hak istimewa. Anda dapat melakukannya dengan:
sumber
Anda harus:
sumber
Saya pernah berhadapan dengan masalah ini sekali. cukup ubah pengguna basis data menjadi superuser dan masalah Anda terpecahkan.
ALTER PENGGUNA myuser DENGAN SUPERUSER;
sumber