patternsqlModerate
Explicitly granting permissions to update the sequence for a serial column necessary?
Viewed 0 times
necessarypermissionsupdatethecolumngrantingsequenceexplicitlyserialfor
Problem
Recently I did create a table as a superuser including a serial id column, e.g.,
As I wanted my non-superuser user to have write access to that table, I granted it permissions:
At a random point in time after doing so, the insertions made by that user started to fail because the user lacked permission to modify the sequence
I worked around this by giving the user the required permission, like this:
Can someone help me understand
create table my_table
(
id serial primary key,
data integer
);As I wanted my non-superuser user to have write access to that table, I granted it permissions:
grant select, update, insert, delete on table my_table to writer;At a random point in time after doing so, the insertions made by that user started to fail because the user lacked permission to modify the sequence
my_table_id_seq associated to the serial column. Unfortunately I can't reproduce that on my current database.I worked around this by giving the user the required permission, like this:
grant all on table my_table_id_seq to writer;Can someone help me understand
- why, at some point, the previously sufficient permissions might start to fail?
- what is the proper way to grant write permission for a table with a serial column?
Solution
You most probably need:
The manual:
USAGE
...
For sequences, this privilege allows the use of the
Since a sequence is a special kind of table (and for historical reasons)
Since Postgres 10, we can use
GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;The manual:
USAGE
...
For sequences, this privilege allows the use of the
currval and nextval functions.nextval() is the reason you need the USAGE privilege on the sequence for a table with serial column.- Safely rename tables using serial primary key columns
Since a sequence is a special kind of table (and for historical reasons)
GRANT ... ON TABLE works on sequences, too. But you do not normally need that at all.Since Postgres 10, we can use
IDENTITY columns instead of serial. Those use bound sequences without separate permissions internally. See:- What are Identity Columns?
- Auto increment table column
Code Snippets
GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;Context
StackExchange Database Administrators Q#71528, answer score: 16
Revisions (0)
No revisions yet.