ERROR: permiso denegado para la secuencia ciudades_id_seq usando Postgres
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?
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.
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;