HiveBrain v1.2.0
Get Started
← Back to all entries
patternsqlModerate

Explicitly granting permissions to update the sequence for a serial column necessary?

Submitted by: @import:stackexchange-dba··
0
Viewed 0 times
necessarypermissionsupdatethecolumngrantingsequenceexplicitlyserialfor

Problem

Recently I did create a table as a superuser including a serial id column, e.g.,

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:

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.