Ma réponse est similaire à celui-ci sur ServerFault.com .
Être conservateur
Si vous voulez être plus conservateur que d'accorder "tous les privilèges", vous pourriez essayer quelque chose de plus proche de ce qui suit.
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
fait référence au nom du schéma par défaut créé pour chaque nouvelle base de données/catalogue. Remplacez par votre propre nom si vous avez créé un schéma.
Accès au schéma
Pour accéder à un schéma, quelle que soit l'action, l'utilisateur doit se voir accorder des droits d'utilisation. Avant qu'un utilisateur puisse sélectionner, insérer, mettre à jour ou supprimer un schéma, il doit d'abord se voir accorder des droits d'utilisation.
Vous ne remarquerez pas cette exigence lorsque vous utiliserez Postgres pour la première fois. Par défaut, chaque base de données possède un premier schéma nommé public
. Par défaut, chaque utilisateur se voit automatiquement accorder des droits d'utilisation pour ce schéma particulier. Lorsque vous ajoutez des schémas supplémentaires, vous devez explicitement accorder des droits d'utilisation.
GRANT USAGE ON SCHEMA some_schema_ TO some_user_ ;
Extrait de la Postgres doc :
Pour les schémas, autorise l'accès aux objets contenus dans le schéma spécifié (en supposant que les exigences de privilèges propres aux objets soient également respectées). Cela permet essentiellement au bénéficiaire de la subvention 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 du système. De plus, après avoir révoqué cette permission, les backends existants peuvent avoir des déclarations qui ont précédemment effectué cette recherche, ce qui fait que ce n'est pas un moyen totalement sûr d'empêcher l'accès aux objets.
Pour plus de détails, voir la question, Que fait exactement GRANT USAGE ON SCHEMA ? . Accordez une attention particulière aux éléments suivants La réponse par l'expert Postgres Craig Ringer .
Objets existants et futurs
Ces commandes n'affectent que les objets existants. Les tables et autres objets que vous créerez à l'avenir bénéficient de privilèges par défaut jusqu'à ce que vous exécutiez à nouveau les lignes ci-dessus. Voir l'article autre réponse de Erwin Brandstetter pour modifier les valeurs par défaut et affecter ainsi les objets futurs.