ERROR: permiso denegado para la secuencia ciudades_id_seq usando Postgres

Resuelto Tõnis Ojandu asked hace 12 años • 5 respuestas

Ejecuté el siguiente script SQL en mi base de datos:

create table cities (
id serial primary key,
name text not null
);

create table reports (
id serial primary key,
cityid integer not null references cities(id),
reportdate date not null,
reporttext text not null
);

create user www with password 'www';

grant select on cities to www;
grant insert on cities to www;
grant delete on cities to www;

grant select on reports to www;
grant insert on reports to www;
grant delete on reports to www;

grant select on cities_id_seq to www;
grant insert on cities_id_seq to www;
grant delete on cities_id_seq to www;

grant select on reports_id_seq to www;
grant insert on reports_id_seq to www;
grant delete on reports_id_seq to www;

Cuando, como usuario www, intente:

insert into cities (name) values ('London');

Obtuve el siguiente error:

ERROR: permission denied for sequence cities_id_seq

Entiendo que el problema radica en el tipo de serie. Es por eso que otorgo derechos de selección, inserción y eliminación para *_id_seq a www. Sin embargo, esto no soluciona mi problema. ¿Qué me estoy perdiendo?

Tõnis Ojandu avatar Feb 17 '12 15:02 Tõnis Ojandu
Aceptado

Desde PostgreSQL 8.2 tienes que usar:

GRANT USAGE, SELECT ON SEQUENCE cities_id_seq TO www;

CONCEDER USO: para secuencias, este privilegio permite el uso de las funciones currval y nextval.

Además, como señaló @epic_fil en los comentarios, puedes otorgar permisos a todas las secuencias en el esquema con:

GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public TO www;

Nota : No olvide elegir la base de datos ( \c <database_name>) antes de ejecutar los comandos de concesión de privilegios.

kupson avatar Feb 17 '2012 08:02 kupson

Dado que @Phil tiene un comentario que recibió muchos votos a favor que tal vez no se noten, estoy usando su sintaxis para agregar una respuesta que otorgará permisos a un usuario para todas las secuencias en un esquema (suponiendo que su esquema sea el 'público' predeterminado). )

GRANT USAGE, SELECT ON ALL SEQUENCES IN SCHEMA public to www;
Tom Gerken avatar Mar 24 '2015 21:03 Tom Gerken