明确授予权限以更新必要的串行列的序列?


9

最近,我确实以超级用户身份创建了一个表格,其中包括一个序列ID列,例如,

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

当我希望我的非超级用户用户对该表具有写权限时,我授予了它权限:

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

在这样做之后的一个随机时间点,该用户进行的插入操作开始失败,因为该用户没有权限修改my_table_id_seq与串行列关联的序列。不幸的是,我无法在当前数据库中重现该内容。

我通过为用户提供所需的权限来解决此问题,如下所示:

grant all on table my_table_id_seq to writer;

有人可以帮助我了解

  • 为什么在某个时候以前足够的权限可能会开始失败?
  • 授予具有串行列的表的写许可权的正确方法是什么?

Answers:


10

您最可能需要:

GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;

每个文档:

使用
...
对于序列,此特权允许使用currvalnextval功能。

nextval()这就是您需要USAGE具有serial列的表的序列特权的原因。
有关SO的相关答案中的详细信息。

由于序列是一种特殊的表(并且由于历史原因)也GRANT ... ON TABLE适用于序列。但是您通常根本不需要。


我们是否不需要为此更新SEQUENCE?
好奇的2016年

@anshupitlia:不。如上所述。
Erwin Brandstetter
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.