GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
L'utilisateur en lecture seule peut se connecter, voir les tableaux, mais lorsqu'il essaie de faire une simple sélection, il obtient:
ERROR: permission denied for relation mytable
SQL state: 42501
Cela se produit sur PostgreSQL 9.1
Qu'est-ce que j'ai fait de mal?
postgresql
Sorin
la source
la source
Réponses:
Voici la solution complète pour PostgreSQL 9+, mise à jour récemment.
Merci à https://jamie.curle.io/creating-a-read-only-user-in-postgres/ pour plusieurs aspects importants
Si quelqu'un trouve un code plus court, et de préférence un code capable de l'exécuter pour toutes les bases de données existantes, félicitations supplémentaires.
la source
GRANT ALL
autorisation par défaut à l'utilisateur en lecture seule?\ddp
. Doit apparaître=r/
commegranting_user=r/readonly_user
pour un accès en lecture seule.Essayez d'ajouter
Vous ne saviez probablement pas qu'il fallait disposer des autorisations requises sur un schéma pour pouvoir utiliser des objets dans le schéma.
la source
psql
commepostgres
utilisateur et je reçois une réponse appropriée,GRANT
. Pourtant, quand je regarde l'ACL sur les tables, je ne vois que deux autres comptes, l'un étant le propriétaire de la base de donnéesjirauser
et un autre compte en lecture seule nomméqauser
. Mais monreadonly
n'y apparaît pas. Postgres est la version 9.1 et j'ai même redémarré le serveur, toujours rien ne se passe.Cela a fonctionné pour moi:
Vérifiez le rôle actuel auquel vous êtes connecté en utilisant: SELECT CURRENT_USER, SESSION_USER;
Remarque : il doit correspondre au propriétaire du schéma.
Schéma | Nom | Type | Propriétaire
-------- + -------- + ------- + ----------
Si le propriétaire est différent, attribuez toutes les autorisations au rôle d'utilisateur actuel à partir du rôle d'administrateur en:
GRANT 'ROLE_OWNER' à 'CURRENT ROLENAME';
Ensuite, essayez d'exécuter la requête, elle donnera la sortie car elle a maintenant accès à toutes les relations.
la source
assurez-vous que votre utilisateur dispose d'attributs sur son rôle. par exemple:
après avoir exécuté la commande suivante:
il a résolu le problème.
voir le tutoriel pour les rôles et autres choses ici: https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2
la source
ERROR: permission denied for relation mytable
Vous devez exécuter la requête suivante:
Ou si votre erreur se trouve dans une vue, la table n'a peut-être pas l'autorisation, vous devez donc exécuter la requête suivante:
la source
ALTER DROP DELETE
Ect. À cet utilisateur ...