4 votes

PostgreSQL : Permission d'exécuter la fonction (qui insère dans une table) mais pas la permission d'insérer directement

Désolé si ce n'est pas le bon endroit pour poser cette question.

J'ai créé une fonction qui insère des valeurs dans de nombreuses tables, et je veux que le front-end web exécute cette fonction. J'ai accordé les autorisations d'exécution au rôle de connexion du front-end web, mais je ne veux pas que le code du front-end web puisse insérer directement des valeurs dans les tables, je souhaite que le front-end web utilise uniquement la fonction que j'ai créée à cet effet.

Si j'accorde l'autorisation d'exécution au rôle de connexion du front-end web mais que je n'accorde pas les autorisations d'insertion sur les tables dans lesquelles la fonction insère des valeurs, une erreur d'accès se produit.

Comment puis-je procéder ?

7voto

Vous devez avoir un autre rôle, qui a les privilèges d'écrire directement dans les tables. Ensuite, vous créez la fonction en utilisant ce autre rôle, et ajoutez la clause "SECURITY DEFINER" à la définition de la fonction. Ensuite, vous accordez l'exécution de cette fonction à votre rôle web.

Vous pouvez en savoir plus à ce sujet dans la documentation.

Vous voudrez peut-être aussi consulter un article de blog que j'ai écrit une fois sur la sécurisation de la base de données.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X