Ma réponse est similaire à celle-ci sur ServerFault.com .
Être conservateur
Si vous voulez être plus conservateur que d'accorder «tous les privilèges», vous pouvez essayer quelque chose de plus comme celui-ci.
GRANT SELECT, INSERT, UPDATE, DELETE ON ALL TABLES IN SCHEMA public TO some_user_;
GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA public TO some_user_;
L'utilisation de public
là fait référence au nom du schéma par défaut créé pour chaque nouvelle base de données / catalogue. Remplacez-le par votre propre nom si vous avez créé un schéma.
Accès au schéma
Pour accéder à un schéma, pour toute action, l'utilisateur doit disposer des droits "d'utilisation". Avant qu'un utilisateur puisse sélectionner, insérer, mettre à jour ou supprimer, un utilisateur doit d'abord se voir accorder une "utilisation" d'un schéma.
Vous ne remarquerez pas cette exigence lors de la première utilisation de Postgres. Par défaut, chaque base de données a un premier schéma nommé public
. Et chaque utilisateur par défaut a reçu automatiquement les droits "d'utilisation" de ce schéma particulier. Lorsque vous ajoutez un schéma supplémentaire, vous devez explicitement accorder des droits d'utilisation.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Extrait de la doc Postgres :
Pour les schémas, autorise l'accès aux objets contenus dans le schéma spécifié (en supposant que les exigences de privilège propres aux objets sont également satisfaites). Cela permet essentiellement au bénéficiaire de «rechercher» des objets dans le schéma. Sans cette autorisation, il est toujours possible de voir les noms des objets, par exemple en interrogeant les tables système. De plus, après la révocation de cette autorisation, les backends existants peuvent avoir des instructions qui ont précédemment effectué cette recherche, il ne s'agit donc pas d'un moyen totalement sécurisé d'empêcher l'accès aux objets.
Pour plus de discussion, voir la question, que fait exactement l'utilisation des subventions sur le schéma? . Portez une attention particulière à la réponse de l'expert de Postgres Craig Ringer .
Objets existants et futur
Ces commandes n'affectent que les objets existants. Les tables et autres que vous créez à l'avenir obtiennent les privilèges par défaut jusqu'à ce que vous réexécutiez ces lignes ci-dessus. Voir l' autre réponse d'Erwin Brandstetter pour changer les valeurs par défaut affectant ainsi les objets futurs.