Pemberian izin secara eksplisit untuk memperbarui urutan kolom kolom yang diperlukan?


9

Baru-baru ini saya membuat tabel sebagai superuser termasuk kolom id serial, misalnya,

create table my_table
(
    id serial primary key,
    data integer
);

Karena saya ingin pengguna non-superuser saya memiliki akses tulis ke tabel itu, saya memberinya izin:

grant select, update, insert, delete on table my_table to writer;

Pada waktu yang acak setelah melakukannya, penyisipan yang dilakukan oleh pengguna itu mulai gagal karena pengguna tidak memiliki izin untuk mengubah urutan yang my_table_id_seqterkait dengan kolom serial. Sayangnya saya tidak dapat mereproduksi di database saya saat ini.

Saya mengatasi hal ini dengan memberikan izin yang diperlukan kepada pengguna, seperti ini:

grant all on table my_table_id_seq to writer;

Adakah yang bisa membantu saya mengerti

  • mengapa, pada titik tertentu, izin yang cukup sebelumnya mungkin mulai gagal?
  • apa cara yang tepat untuk memberikan izin menulis untuk tabel dengan kolom serial?

Jawaban:


10

Anda mungkin paling membutuhkan:

GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;

Per dokumentasi:

PENGGUNAAN
...
Untuk urutan, hak istimewa ini memungkinkan penggunaan currvaldan nextvalfungsi.

nextval()adalah alasan Anda membutuhkan USAGEhak istimewa pada urutan untuk tabel dengan serialkolom.
Detail dalam jawaban terkait ini di SO.

Karena urutan adalah jenis tabel khusus (dan karena alasan historis) juga GRANT ... ON TABLEbekerja pada urutan. Tetapi Anda biasanya tidak membutuhkan itu sama sekali.


Bukankah kita perlu UPDATE ON SEQUENCE untuk ini?
ingin tahu

@anshupitlia: Tidak. Seperti dijelaskan di atas.
Erwin Brandstetter
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.