Mar 05 2021

Modifier le DEFINER et la Sécurité des Procédures/Fonctions Mysql

Publié par à 11:24 sous Mysql

La sécurité des procédures et fonctions Mysql est paramétrée sur DEFINER par défaut, comme décrit dans le chapitre « Create Procedure and create function chapter » sur mysql.com.
Pourquoi est-ce important? N’importe qui ayant le privilège EXECUTE peut lancer la procédure ou la fonction avec les droits du DEFINER. Ce n’est peut-être pas souhaitable.

Une erreur peut survenir lorsque que quelqu’un essaie d’exécuter la procédure/fonction dont le « definer » ou auteur a été supprimé.
ERROR 1449 (HY000): The user specified as a definer (‘definer’@’localhost’) does not exist
On peut alors en venir à devoir changer le definer et/ou le type de sécurité sur de nombreuses procédures et fonctions.
Il est intéressant de noter qu’un utilisateur supprimé n’est pas gênant pour Mysql lors d’un dump ou d’une restauration contrairement aux vues pour lesquelles une erreur est retournée.


Tout d’abord, on peut jeter un oeil global aux procédures et fonctions avec les 2 commandes basiques:

SHOW FUNCTION STATUS;
SHOW PROCEDURE STATUS;

On peut aussi ajouter LIKE ‘ma_proc’, ou WHERE Db LIKE ‘ma_base’ pour filtrer les résultats.


Il est toujours possible de modifier un à un les definers et la sécurité avec Mysql Workbench, ou en les recréant en SQL mais le plus rapide est de les changer tous d’un coup en ligne de commande (restreindre la mise à jour en adaptant le WHERE):

UPDATE mysql.proc SET security_type='INVOKER'
WHERE security_type='DEFINER';


On peut aussi mettre à jour le DEFINER avec la requête suivante:

UPDATE mysql.proc SET definer='root@localhost'
WHERE NOT definer='root@localhost';


No responses yet

Comments RSS

Leave a Reply