Soy nuevo en postgres (y en todos los sistemas de información de la base de datos). 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, intenta:
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?
sql
postgresql
permissions
auto-increment
Vampnik
fuente
fuente
Respuestas:
Desde PostgreSQL 8.2 tienes que usar:
USO DE LA CONCESIÓN: para secuencias, este privilegio permite el uso de las funciones currval y nextval.
Además, como lo señala @epic_fil en los comentarios, puede otorgar permisos a todas las secuencias del esquema con:
fuente
SELECT
necesario? ¿No deberíaUSAGE
cubrir lo que se necesita?Como @Phil tiene un comentario que recibe muchas votaciones positivas que podrían no ser notadas, 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 )
fuente
@Tom_Gerken, @epic_fil y @kupson son bastante correctos con sus declaraciones para dar permisos para trabajar con secuencias existentes. Sin embargo, el usuario NO obtendrá derechos de acceso a secuencias creadas en el futuro. Para hacer eso, debe combinar la declaración GRANT con una declaración ALTER DEFAULT PRIVILEGES, de esta manera:
Esto solo funciona en PostgreSQL 9+, por supuesto.
Esto se agregará a los privilegios predeterminados existentes, no los sobrescribirá, por lo que es bastante seguro en ese sentido.
fuente
Ejecute el siguiente comando en postgres.
iniciar sesión en postgres:
pgowner será su usuario de la base de datos.
fuente