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适用于序列。但是您通常根本不需要它。
| 归档时间: |
|
| 查看次数: |
13451 次 |
| 最近记录: |