ERREUR: permission denied pour la séquence cities_id_seq à l'aide de Postgres
Je suis nouveau sur postgres (et à la base de données info systèmes dans l'ensemble). J'ai couru script sql suivant sur ma base de données:
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;
Lorsque, en tant que l'utilisateur www, en essayant de:
insert into cities (name) values ('London');
J'obtiens l'erreur suivante:
ERROR: permission denied for sequence cities_id_seq
- Je obtenir que le problème est avec la série du type. C'est pourquoi j'ai grant select, insert et de supprimer les droits de l' *_id_seq pour www. Pourtant, cela ne résout pas mon problème. Ce qui me manque?
- L'octroi de l'insérer/supprimer une séquence ne fait pas de sens pour moi. Je suis surpris que cela fonctionne.
InformationsquelleAutor Vampnik | 2012-02-17
Vous devez vous connecter pour publier un commentaire.
Depuis PostgreSQL 8.2 vous devez utiliser:
SUBVENTION à l'UTILISATION De séquences, ce privilège autorise l'utilisation de la currval et nextval fonctions.
Aussi comme l'a souligné @epic_fil dans les commentaires, vous pouvez accorder des autorisations à toutes les séquences dans le schéma avec:
USAGE, SELECT
devrait être suffisant.grant all privileges on all sequences in schema public to staging;
psycopg2.ProgrammingError: permission denied for sequence django_migrations_id_seq
SELECT
nécessaire? Ne devrait pasUSAGE
couvrir ce qui est nécessaire?USAGE
"permet l'utilisation de lacurrval
etnextval
fonctions" dans les séquences. Donc, à proprement parler, c'est généralement tout ce qui est nécessaire, car typique de colonne par défaut utilisenextval
. MaisUSAGE
seul ne permettrait pas d'autres, raisonnable, l'accès à la séquence, comme dans stackoverflow.com/questions/14886048#14886371donc la convention de l'octroi deSELECT
ainsi.Depuis @Phil a un commentaire que beaucoup de upvotes qui pourraient ne pas être remarqué, je suis en utilisant sa syntaxe pour ajouter une réponse qui permettra d'accorder des autorisations à un utilisateur pour toutes les séquences dans un schéma (en supposant que votre schéma est la valeur par défaut "public")
@Tom_Gerken, @epic_fil et @kupson sont tout à fait corrects avec leurs déclarations à donner des autorisations de travailler avec les séquences. Toutefois, l'utilisateur ne sera PAS obtenir des droits d'accès à des séquences créées à l'avenir. Pour ce faire, vous devez combiner l'instruction GRANT avec un ALTER par DÉFAUT des PRIVILÈGES d'instruction, comme suit:
Cela ne fonctionne que sur PostgreSQL 9+, bien sûr.
Cela va ajouter à défaut de privilèges, de ne pas les écraser, donc, est tout à fait sûr à cet égard.
Exécuter la commande suivante dans postgres.
de connexion à postgresql:
pgowner sera votre base de données utilisateur.