J'ai essayé d'exécuter une simple commande sql:
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 également essayé de sélectionner d'autres tables et j'ai eu le même problème. J'ai aussi essayé de faire ça:
GRANT ALL PRIVILEGES ON DATABASE jerry to tom;
mais j'ai reçu cette réponse de la console
WARNING: no privileges were granted for "jerry"
Avez-vous une idée de ce qui ne va pas?
Réponses:
GRANT sur la base de données n'est pas ce dont vous avez besoin. Accordez directement sur les tables.
L'octroi de privilèges sur la base de données est principalement utilisé pour accorder 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 si elles ont suffisamment d'autres autorisations.
Vous voulez plutôt:
Cela réglera ce problème.
la source
Publication de la réponse de Ron E pour les privilèges de subvention sur toutes les tables, car cela pourrait être utile à d'autres.
la source
ALL SEQUENCES
etALL FUNCTIONS
.ALL TABLES
comprend également des vues, donc il n'y a pas deALL VIEWS
commande séparée :-)Connectez-vous d'abord à la bonne base de données , puis exécutez:
la source
\connect databasename;
la source
La première et importante étape consiste à se connecter à votre base de données:
2 étapes, accorder des privilèges
la source
Pour accorder des autorisations à toutes les tables existantes du schéma, utilisez:
Pour spécifier les autorisations par défaut qui seront appliquées aux futures tables, utilisez:
par exemple
Si vous utilisez des colonnes
SERIAL
ouBIGSERIAL
alors vous voudrez probablement faire de même pourSEQUENCES
, sinon votreINSERT
échouera ( Postgres 10IDENTITY
ne souffre pas de ce problème et est recommandé par rapport auxSERIAL
types), c'est-à-direVoir aussi ma réponse aux autorisations PostgreSQL pour Web App pour plus de détails et un script réutilisable.
Réf:
SUBVENTION
ALTER DEFAULT PRIVILEGES
la source
Cela se produit fréquemment lorsque vous créez une table en tant que postgres utilisateur, puis essayez d'y accéder en tant qu'utilisateur ordinaire. Dans ce cas, il est préférable de se connecter en tant qu'utilisateur postgres et de changer la propriété de la table avec la commande:
la source
Assurez-vous de vous connecter à psql en tant que propriétaire des tables. pour savoir à qui appartiennent les tables utilisées
\dt
psql -h CONNECTION_STRING DBNAME -U OWNER_OF_THE_TABLES
alors vous pouvez exécuter les SUBVENTIONS
la source
Comme vous recherchez des autorisations de sélection, je vous suggère d'accorder uniquement des privilèges de sélection plutôt que tous. Vous pouvez le faire en:
la source
Vous devriez:
la source
J'ai été confronté à ce problème une fois. changez simplement l'utilisateur de base de données en superutilisateur et votre problème est résolu.
ALTER USER myuser AVEC SUPERUSER;
la source