Vous n'êtes pas identifié(e).
Pages : 1
Bonjour,
Je souhaiterai avoir un éclaircissement sur la gestion des droits dans les procédure/fonction stockée...
J'ai un utilisateur A qui exécute la fonction "superproc()"
J'ai défini le droit suivant sur la fonction.
GRANT EXECUTE ON FUNCTION schema.superproc() TO A;
L'utilisateur A a pour droit sur la table:
GRANT SELECT, INSERT ON TABLE schema.tabledata TO A;
Le serveur inscrit dans le log :
2011-05-29 01:00:57 CEST ERREUR: droit refusé pour la relation tabledata
Cela semble expliquer qu'il faut j'ajoute le droit DELETE sur la table schema.tabledata à l'utilisateur A... le problème est que je ne veux pas, pour raison de sécurité, que l'utilisateur A puisse supprimer des données de cette table. Y a-t-il une solution pour contourner ce problème...
Merci
Hors ligne
Si votre procédure stockée utilise DELETE, en effet, il vous manque ce droit pour cet utilisateur. L'alternative est de créer la procédure stockée en tant qu'un utilisateur qui a ce droit et en déclarant la procédure comme SECURITY DEFINER. Dans ce cas, la procédure n'est pas exécuté en tant que l'utilisateur A mais en tant que le propriétaire de la procédure.
Guillaume.
Hors ligne
Ok, ça fonctionne très bien.
Petite question:
Le faite de mettre l'option SECURITY DEFINER permet d'exécuter la fonction avec les droits du propriétaire, cependant est-ce que la règle définie par le GRANT EXECUTE est elle shunté ?
Hors ligne
Non. Il faut avoir le droit d'exécuter (grant execute) la fonction pour ensuite bénéficier du security definer.
Marc.
Hors ligne
Nikel, merci pour la confirmation
Hors ligne
Pages : 1