Exécutez ceci connecté à la base de données que vous souhaitez configurer.
-- Create the user.
CREATE ROLE somebody WITH LOGIN PASSWORD '...';
-- Prevent all authenticated users from being able to use the database,
-- unless they have been explicitly granted permission.
REVOKE ALL PRIVILEGES ON DATABASE foo FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL FUNCTIONS IN SCHEMA public FROM PUBLIC;
REVOKE ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public FROM PUBLIC;
-- Allow the user to only use the specified functions.
GRANT CONNECT ON DATABASE foo TO somebody;
GRANT EXECUTE ON FUNCTION return_customers(), return_time() TO somebody;
Si vous avez plus de schémas que "publics" alors vous devrez les ajouter aux deux REVOKE ALL PRIVILEGES ON ALL ...
déclarations.
N'oubliez pas que les fonctions doivent avoir été créées avec SECURITY DEFINER
ou cet utilisateur ne pourra toujours pas les exécuter, car le contenu de la fonction sera exécuté avec les autorisations de cet utilisateur, au lieu de l'utilisateur qui a créé la fonction.
Voir :
CREATE FUNCTION
en particulierSECURITY DEFINER
GRANT
à la fois pour ajouter des utilisateurs aux rôles et pour attribuer des droits d'accès aux tables, aux séquences, etcREVOKE
CREATE ROLE