Comment accordez-vous un accès en lecture/sélection à toutes les fonctions et vues à un utilisateur arbitraire?
J'utilise psql --user=postgres -d mydb -f myview.sql
pour créer plusieurs fonctions et vues, puis je lance:
GRANT ALL PRIVILEGES ON DATABASE mydb TO myuser;
Ayant obtenu tous les privilèges, je m'attendrais à ce que myuser
ait désormais accès aux fonctions et aux vues créées par l'utilisateur postgres
. Cependant, lorsque j'essaie d'y accéder avec myuser
, j'obtiens une erreur "autorisation refusée pour la relation ...". Pourquoi est-ce?
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 actuel. Vous pouvez être intéressé par le SECURITY DEFINER
modificateur pour CREATE FUNCTION
. Mais normalement, il suffit d'accorder SELECT
sur les tables impliquées.
Par 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 aucun accès public aux tables, colonnes, schémas et espaces disque logiques;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 pouvez ê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;
Bien que connecté à la base de données en question, bien sûr (voir @ 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
:
Réponse plus détaillée sur la gestion des privilèges:
pgAdmin a une fonctionnalité pour les opérations en bloc plus sophistiquées:
Ou vous pouvez interroger les catalogues système pour créer des instructions DDL pour l'octroi/la révocation en bloc ...