¿Es necesario otorgar permisos explícitamente para actualizar la secuencia de una columna serial?


9

Recientemente creé una tabla como superusuario que incluye una columna de ID de serie, por ejemplo,

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

Como quería que mi usuario no superusuario tuviera acceso de escritura a esa tabla, le concedí permisos:

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

En un momento aleatorio en el tiempo después de hacerlo, las inserciones realizadas por ese usuario comenzaron a fallar porque el usuario no tenía permiso para modificar la secuencia my_table_id_seqasociada a la columna serial. Lamentablemente no puedo reproducir eso en mi base de datos actual.

Trabajé alrededor de esto dándole al usuario el permiso requerido, así:

grant all on table my_table_id_seq to writer;

puede alguien ayudarme a entender

  • ¿Por qué, en algún momento, los permisos previamente suficientes podrían comenzar a fallar?
  • ¿Cuál es la forma correcta de otorgar permiso de escritura para una tabla con una columna en serie?

Respuestas:


10

Probablemente necesites:

GRANT USAGE ON SEQUENCE my_table_id_seq TO writer;

Por documentación:

USO
...
Para secuencias, este privilegio permite el uso de las funciones currvaly nextval.

nextval()es la razón por la que necesita el USAGEprivilegio en la secuencia para una tabla con serialcolumna.
Detalles en esta respuesta relacionada sobre SO.

Dado que una secuencia es un tipo especial de tabla (y por razones históricas) también GRANT ... ON TABLEfunciona en secuencias. Pero normalmente no necesitas eso en absoluto.


¿No necesitamos ACTUALIZAR LA SECUENCIA para esto?
curioso

@anshupitlia: no. Como se explicó anteriormente.
Erwin Brandstetter
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.