J'ai écrit toutes les procédures MySQL sous la forme root@localhost
:
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`(...)
Le problème est que, lors du déploiement sur un autre serveur, je dois remplacer root
par l'utilisateur actuel et remplacer localhost
par l'adresse IP actuelle, ce qui est gênant.
Existe-t-il un moyen d'écrire des procédures pour que quelqu'un qui souhaite utiliser ma base de données et mes procédures n'ait pas à modifier le créateur de chaque procédure?
Comme indiqué dans la documentation MySQL ici
CREATE
[DEFINER = { user | CURRENT_USER }]
PROCEDURE sp_name ([proc_parameter[,...]])
[characteristic ...] routine_body
La partie DEFINER n’est donc pas obligatoire, mais CREATE PROCEDURE devrait fonctionner.
CREATE DEFINER=[your_web_user]@% PROCEDURE p_add_user(...)
Vérifiez-le .. probablement cela vous aidera si vous voulez définir l'utilisateur dans votre procédure ...
Vous pouvez spécifier des privilèges d'exécution en ajoutant l'instruction suivante dans le corps de la procédure (après la déclaration):
SQL SECURITY INVOKER
Exemple:
CREATE DEFINER=`root`@`localhost` PROCEDURE `p_add_user`()
SQL SECURITY INVOKER
(...)
Ce faisant, les privilèges d’invocation réels sont appliqués et la partie DEFINER
est omise (même si elle est ajoutée automatiquement lors de l’importation du schéma) . Référence complète ici: https://dev.mysql.com/ doc/refman/5.7/en/storage-programmes-security.html