moo*_*eep 10 postgresql permissions sequence
最近我确实以超级用户的身份创建了一个表,其中包括一个序列号列,例如,
create table my_table
(
id serial primary key,
data integer
);
Run Code Online (Sandbox Code Playgroud)
因为我希望我的非超级用户用户拥有对该表的写访问权限,所以我授予了它权限:
grant select, update, insert, delete on table my_table to writer;
Run Code Online (Sandbox Code Playgroud)
在这样做之后的随机时间点,该用户所做的插入开始失败,因为该用户没有修改my_table_id_seq
与串行列关联的序列的权限。不幸的是,我无法在我当前的数据库上重现它。
我通过授予用户所需的权限来解决这个问题,如下所示:
grant all on table my_table_id_seq to writer;
Run Code Online (Sandbox Code Playgroud)
有人可以帮我理解
Erw*_*ter 11
您很可能需要:
GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;
Run Code Online (Sandbox Code Playgroud)
用法
...
对于序列,此权限允许使用currval
和nextval
函数。
nextval()
是您需要USAGE
具有serial
列的表的序列特权的原因。
关于 SO 的相关答案中的详细信息。
由于序列是一种特殊的表(并且出于历史原因)也GRANT ... ON TABLE
适用于序列。但是您通常根本不需要它。