Izin ditolak untuk hubungan


331

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?


Saya tidak yakin cara memperbarui izin sehingga saya dapat membaca / menulis dalam DB
Boban


2
Selamat datang di SO! Untuk pertanyaan ini, Anda bisa mendapatkan bantuan lebih banyak di dba.stackexchange.com, meskipun Anda mungkin menemukan banyak komentar sinis :)
Jared Beck

10
Permisi. Ini adalah pertanyaan postgresql kedua yang sangat berkaitan dengan pemrograman yang saya lihat ditutup sebagai off-topic malam ini! Yang terakhir memiliki 67.000 tampilan, ini 30.000 tampilan. Kita harus memiliki klausa popularitas: Setiap pertanyaan non-subyektif dengan> 15.000 tampilan = pada topik.
Theodore R. Smith

1
Pertanyaan ini bukan di luar topik! Namun, itu adalah duplikasi stackoverflow.com/questions/13497352/…
ketika

Jawaban:


391

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:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

Ini akan menangani masalah ini.


7
jalankan sebagai superuser, seperti postgres.
Chris Travers

19
Mungkinkah ini jalan pintas? PEMBERI SEMUA HAK ISTIMEWA DI SEMUA TABEL?
Shadur

196
@Shadur PEMBERI SEMUA HAK ISTIMEWA DI SEMUA TABEL DALAM SKEMA publik Kepada jerry;
Ron E

10
@RonE terbatas pada basis data saat ini?
Shadur

7
@zmiftah untuk skema yang Anda butuhkan> GRANT ALL PRIVILEGES ON SCHEMA nameSchema TO user;
Pierozi

241

Posting Ron E jawaban untuk hak istimewa di semua tabel karena mungkin bermanfaat bagi orang lain.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

21
Anda mungkin juga perlu menjalankan perintah serupa untuk ALL SEQUENCESdan ALL FUNCTIONS.
Pistos

7
Hanya untuk mereka yang bertanya-tanya: ALL TABLESjuga termasuk pandangan, jadi tidak ada ALL VIEWSperintah terpisah :-)
André Gasser

74

Sambungkan ke database yang benar terlebih dahulu , kemudian jalankan:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;

4
terima kasih menghubungkan ke database yang tepat TIDAK saya lakukan sebelumnya!
asgs

15
terhubung ke database kanan membuat dufference BESAR :)\connect databasename;
Denis Matafonov

3
INI. Saya terhubung ke "postgres" selama ini. Terima kasih!
Andrew G.

2
Ya menghubungkan ke DB membuat perbedaan
inostia

44
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;

server ini menyelamatkan hari saya!
anhtran

19

Langkah pertama dan penting adalah terhubung ke db Anda:

psql -d yourDBName

2 langkah, berikan hak istimewa

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;

18

Untuk memberikan izin ke semua tabel yang ada dalam skema, gunakan:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

Untuk menentukan izin default yang akan diterapkan ke tabel di masa depan gunakan:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

misalnya

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

Jika Anda menggunakan SERIALatau BIGSERIALkolom maka Anda mungkin ingin melakukan hal yang sama untuk SEQUENCES, atau Anda INSERTakan gagal ( Postgres 10'sIDENTITY tidak menderita dari masalah itu, dan direkomendasikan pada SERIALjenisnya), yaitu

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

Lihat juga jawaban saya untuk Izin PostgreSQL untuk Aplikasi Web untuk detail lebih lanjut dan skrip yang dapat digunakan kembali.

Ref:

HIBAH

ALTER DEFAULT PRIVILEGES


9

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:

alter table <TABLE> owner to <USER>;

5

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


0

Saat Anda mencari izin pilih, saya sarankan agar Anda hanya memberikan izin pilih daripada semua hak istimewa. Anda dapat melakukannya dengan:

GRANT SELECT ON <table> TO <role>;

0

Anda harus:

  1. terhubung ke database melalui DBeaver dengan pengguna postgres
  2. pada tab kiri buka basis data Anda
  3. buka tab Peran / tarik-turun
  4. pilih pengguna Anda
  5. di tab kanan tekan 'tab Izin'
  6. tekan tab skema Anda
  7. tekan tab tabel / dropdown
  8. pilih semua tabel
  9. pilih semua kotak centang izin yang diperlukan (atau tekan Berikan Semua)
  10. tekan Simpan

-3

Saya pernah berhadapan dengan masalah ini sekali. cukup ubah pengguna basis data menjadi superuser dan masalah Anda terpecahkan.

ALTER PENGGUNA myuser DENGAN SUPERUSER;


Dengan melakukan ini, Anda memberikan lebih banyak komisi daripada yang Anda butuhkan. Superuser akan memberi mereka izin untuk operasi lain yang Anda mungkin tidak ingin pengguna itu lakukan, seperti membuat pengguna lain, database, dll.
Santi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.