La raison en est que vous avez besoin de privilèges supplémentaires pour accéder à une vue ou à une table. Les privilèges sur la base de données ne couvrent pas l'accès à tous les objets qu'elle contient.
C'est différent avec les fonctions :EXECUTE
le privilège est accordé à public
par défaut. Mais la fonction est exécutée avec les privilèges de l'utilisateur courant. Vous pourriez être intéressé par le SECURITY DEFINER
modificateur pour CREATE FUNCTION
. Mais normalement, il suffit d'accorder SELECT
sur les tables concernées.
Selon la documentation sur les privilèges par défaut :
Selon le type d'objet, les privilèges initiaux par défaut peuvent inclure l'octroi de certains privilèges à
PUBLIC
. La valeur par défaut est no publicaccess pour les tables, les colonnes, les schémas et les tablespaces ;CONNECT
privilège etTEMP
privilège de création de table pour les bases de données ;EXECUTE
privilège pour les fonctions; etUSAGE
privilège pour les langues.
Vous pourriez être intéressé par cette commande DDL (nécessite Postgres 9.0 ou version ultérieure) :
GRANT SELECT ON ALL TABLES IN SCHEMA public TO myuser;
En étant connecté à la base de données en question, bien sûr (voir le commentaire de @marcel ci-dessous), et en tant qu'utilisateur disposant de privilèges suffisants. Vous pouvez également être intéressé par le paramètre DEFAULT PRIVILEGES
:
- Accorder tout sur un schéma spécifique dans la base de données à un rôle de groupe dans PostgreSQL
Réponse plus détaillée sur la gestion des privilèges :
- Comment gérer les PRIVILÈGES PAR DÉFAUT pour les UTILISATEURS sur une BASE DE DONNÉES vs SCHEMA ?
pgAdmin dispose d'une fonctionnalité pour des opérations groupées plus sophistiquées :
Ou vous pouvez interroger les catalogues système pour créer des instructions DDL pour l'octroi / la révocation en masse ...