PostgreSQL
 sql >> Base de données >  >> RDS >> PostgreSQL

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

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 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 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 ...