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?
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.
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;
Connectez-vous d'abord à la bonne base de données, puis exécutez:
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO jerry;
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;
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:
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;
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.
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