Cấp quyền rõ ràng để cập nhật trình tự cho một cột nối tiếp cần thiết?


8

Gần đây tôi đã tạo một bảng dưới dạng siêu người dùng bao gồm cột id nối tiếp, ví dụ:

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

Vì tôi muốn người dùng không phải là siêu người dùng của mình có quyền truy cập ghi vào bảng đó, tôi đã cấp cho nó quyền:

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

Tại một thời điểm ngẫu nhiên sau khi làm như vậy, các lần chèn do người dùng đó thực hiện bắt đầu không thành công do người dùng thiếu quyền sửa đổi chuỗi my_table_id_seqliên quan đến cột nối tiếp. Thật không may, tôi không thể sao chép nó trên cơ sở dữ liệu hiện tại của tôi.

Tôi đã làm việc xung quanh điều này bằng cách cung cấp cho người dùng quyền yêu cầu, như thế này:

grant all on table my_table_id_seq to writer;

Ai có thể giúp tôi hiểu

  • Tại sao, tại một số điểm, các quyền đủ trước đó có thể bắt đầu không thành công?
  • cách thích hợp để cấp quyền ghi cho bảng có cột nối tiếp là gì?

Câu trả lời:


9

Bạn có lẽ cần nhất:

GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;

Mỗi tài liệu:

SỬ DỤNG
...
Đối với trình tự, đặc quyền này cho phép sử dụng các chức năng currvalnextval.

nextval()là lý do bạn cần USAGEđặc quyền trên chuỗi cho một bảng có serialcột.
Chi tiết trong câu trả lời liên quan này trên SO.

Vì một chuỗi là một loại bảng đặc biệt (và vì lý do lịch sử) cũng GRANT ... ON TABLEhoạt động trên các chuỗi. Nhưng bình thường bạn không cần điều đó.


Chúng ta không cần CẬP NHẬT VỀ TÌNH YÊU cho việc này?
tò mò

@anshupitlia: Không. Như đã giải thích ở trên.
Erwin Brandstetter
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.