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

Créez un rôle PostgreSQL 9 avec login (utilisateur) juste pour exécuter des fonctions

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 :