web-dev-qa-db-fra.com

Comment accorder tous les privilèges sur les vues à un utilisateur arbitraire

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?

23
Cerin

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 et TEMP privilège de création de table pour les bases de données; EXECUTE privilège pour les fonctions; et USAGE 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:

enter image description here

Ou vous pouvez interroger les catalogues système pour créer des instructions DDL pour l'octroi/la révocation en bloc ...

30