ERREUR: permission denied pour relation tablename sur Postgres, tout en essayant à un SÉLECTIONNER un readonly utilisateur
GRANT SELECT ON ALL TABLES IN SCHEMA public TO readonly;
La readonly utilisateur peut se connecter, voir les tableaux mais quand il essaie de faire un select simple il obtient:
ERROR: permission denied for relation mytable
SQL state: 42501
Ce qui se passe sur PostgreSQL 9.1
Ce que j'ai fait de mal?
- Pouvez-vous donner quelques détails au sujet de "relation mytable" ? Schéma, est-ce une "vraie" table (ou vue/de fonction), déclencheurs...
- Oui c'est une bonne table.
Vous devez vous connecter pour publier un commentaire.
Voici la solution complète pour PostgreSQL 9+, mis à jour récemment.
Grâce à https://jamie.curle.io/creating-a-read-only-user-in-postgres/ pour plusieurs aspects importants
Si quelqu'un de trouver un raccourci de code, et de préférence celui qui est capable d'effectuer ce pour toutes les bases de données existantes, extra bravo.
GRANT ALL
autorisation par défaut pour la lecture seule de l'utilisateur?\ddp
. Doit juste montrer=r/
commegranting_user=r/readonly_user
pour l'accès en lecture seule.Essayez d'ajouter
Vous a sans doute pas conscience que l'on a besoin d'avoir les autorisations nécessaires à un schéma, afin d'utiliser des objets dans le schéma.
psql
commepostgres
utilisateur et je ne reçois pas une réponse appropriée,GRANT
. Pourtant, quand je regarde les ACL sur les tables, je ne vois que deux autres comptes, l'un étant le propriétaire de base de donnéesjirauser
et un autre en lecture seule nom de compte deqauser
. 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érifier le rôle que vous êtes connecté à l'aide de:
SÉLECTIONNEZ CURRENT_USER, SESSION_USER;
Note: Il doit correspondre avec le Propriétaire du schéma.
Schéma | Nom | Type | Propriétaire
--------+--------+-------+----------
Si le propriétaire est différent, puis donner toutes les subventions à l'utilisateur actuel, le rôle de l'administrateur de rôle par :
SUBVENTION "ROLE_OWNER' à 'l'ACTUEL ROLENAME';
Puis essayez d'exécuter la requête, il donnera à la sortie car il a accès à toutes les relations de maintenant.
assurez-vous que votre utilisateur a les attributs de son rôle. par exemple:
après l'exécution de la commande suivante:
il a résolu le problème.
voir le tutoriel pour les rôles et les trucs ici: https://www.digitalocean.com/community/tutorials/how-to-use-roles-and-manage-grant-permissions-in-postgresql-on-a-vps--2
Vous devez exécuter la requête suivante:
Ou si le message d'erreur est en vue alors peut-être que la table n'ont pas d'autorisation, de sorte que vous devez exécuter la requête suivante:
ALTER DROP DELETE
Ect. Pour que l'utilisateur...