web-dev-qa-db-fra.com

Autorisation refusée pour relation

J'ai essayé d'exécuter une commande SQL simple:

select * from site_adzone;

et j'ai eu cette erreur

ERROR:  permission denied for relation site_adzone

Quel pourrait être le problème ici?

J'ai aussi essayé de sélectionner d'autres tables et j'ai eu le même problème. J'ai aussi essayé de faire ceci:

GRANT ALL PRIVILEGES ON DATABASE jerry to tom;

mais j'ai eu cette réponse de la console

WARNING:  no privileges were granted for "jerry"

Avez-vous une idée de ce qui peut être faux?

287
Boban

GRANT sur la base de données n'est pas ce dont vous avez besoin. Grant sur les tables directement.

L'attribution de privilèges sur la base de données est principalement utilisée pour octroyer ou révoquer des privilèges de connexion. Cela vous permet de spécifier qui peut faire des choses dans la base de données s’ils disposent d’autorisations suffisantes.

Vous voulez plutôt:

 GRANT ALL PRIVILEGES ON TABLE side_adzone TO jerry;

Cela prendra soin de ce problème.

332
Chris Travers

Afficher Ron E answer pour attribuer des privilèges sur toutes les tables car cela pourrait être utile à d’autres.

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
212
sag

Connectez-vous d'abord à la bonne base de données, puis exécutez:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
62
user2757813
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public to jerry;
GRANT ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public to jerry;
27
Klanjabrik

Pour accorder des autorisations à toutes les tables existantes du schéma, utilisez:

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA <schema> TO <role>

Pour spécifier les autorisations par défaut qui seront appliquées aux tables futures, utilisez:

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> 
  GRANT <privileges> ON TABLES TO <role>;

par exemple.

ALTER DEFAULT PRIVILEGES IN SCHEMA public 
  GRANT SELECT, INSERT, UPDATE, DELETE ON TABLES TO admin;

Si vous utilisez SERIAL ou BIGSERIAL colonnes, vous voudrez probablement faire de même pour SEQUENCES, sinon votre INSERT échouera ( Postgres 10's IDENTITY ne souffre pas de ce problème et est recommandé par rapport aux types SERIAL), c'est-à-dire.

ALTER DEFAULT PRIVILEGES IN SCHEMA <schema> GRANT ALL ON SEQUENCES TO <role>;

Voir aussi ma réponse à Autorisations PostgreSQL pour Web App pour plus de détails et un script réutilisable.

Ref:

GRANT

ALTER DEFAULT PRIVILEGES

17
isapir

1ère et importante étape est de vous connecter à votre base de données:

psql -d yourDBName

2 étapes, accorder des privilèges

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO userName;
14
zond

Cela se produit fréquemment lorsque vous créez une table en tant qu'utilisateur postgres, puis que vous essayez d'y accéder en tant qu'utilisateur ordinaire. Dans ce cas, il est préférable de vous reconnecter en tant que postgres et d'utiliser ALTER TABLE OWNER TO someuser pour modifier la propriété de la table en utilisateur qui l'utilisera.

5
Bruce

Assurez-vous de vous connecter à psql en tant que propriétaire des tables. pour savoir à qui appartiennent les tables, utilisez \dt

psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES

alors vous pouvez exécuter les subventions

4
Brian McCall