Cet article explique comment résoudre les problèmes qui peuvent survenir lorsque le DEFINER L'attribut est utilisé avec les objets stockés MySQL (vues, déclencheurs, fonctions et procédures stockées).
Problème
Vous pouvez rencontrer des problèmes d'affichage ou d'exécution des objets stockés MySQL (vues, déclencheurs, fonctions et procédures stockées). Par exemple, vous pouvez recevoir le message d'erreur suivant dans phpMyAdmin :
Error in processing request: No routine with name 'example' found in database 'example_db'. You might be lacking the necessary privileges to edit this routine.
Alternativement, vous pouvez rencontrer des erreurs apparemment aléatoires lors du fonctionnement du site Web ou une perte de fonctionnalité de la base de données.
Cause
Le DÉFINISSEUR L'attribut est utilisé pour spécifier un compte utilisateur MySQL qui peut accéder à un objet stocké particulier. Cependant, des problèmes peuvent survenir lorsque le compte utilisateur MySQL dans un DEFINER L'attribut ne correspond pas à l'utilisateur MySQL actuellement connecté. Par exemple, cela peut se produire lors de l'utilisation de phpMyAdmin de cPanel, qui se connecte toujours en tant qu'utilisateur du compte principal (cPanel) et non en tant qu'utilisateur de base de données défini par l'utilisateur.
De même, ce problème peut survenir après une migration de site si le DEFINER les attributs de la base de données ne sont pas mis à jour avec les utilisateurs de la base de données du nouvel environnement d'hébergement.
Résolution
Pour résoudre ce problème, vous pouvez essayer de vous connecter à la base de données en tant qu'utilisateur de base de données référencé dans le DEFINER les attributs. (Pour déterminer le bon utilisateur de la base de données, vous devrez peut-être vider la base de données et examiner le DEFINER attributs.) Vous pouvez vous connecter de plusieurs manières en tant qu'utilisateurs de base de données différents :
Méthode n°1 :Utiliser une application client MySQL
Vous pouvez utiliser une application client MySQL, telle que MySQL Workbench, pour vous connecter à la base de données en tant qu'utilisateur de base de données correct. Vous pourrez alors éditer et exécuter des objets stockés en utilisant la bonne identité. Pour plus d'informations sur l'utilisation d'une application cliente MySQL pour se connecter à vos bases de données, veuillez consulter cet article.
Méthode n°2 :Utiliser le programme de ligne de commande 'mysql'
Alternativement, vous pouvez utiliser le mysql programme de ligne de commande pour se connecter à la base de données en tant qu'utilisateur de base de données correct. Vous pourrez alors éditer et exécuter des objets stockés en utilisant la bonne identité. Pour plus d'informations sur l'utilisation de mysql programme de ligne de commande, veuillez consulter cet article.
Méthode n°3 :Utiliser une installation personnalisée de phpMyAdmin
Si vous ne souhaitez pas utiliser une application client MySQL ou la ligne de commande, vous pouvez créer une installation phpMyAdmin autonome sur votre compte d'hébergement. Cette installation personnalisée vous permet de vous connecter à la base de données en tant qu'utilisateur de base de données correct plutôt qu'en tant qu'utilisateur du compte principal (cPanel). Pour plus d'informations sur la création d'une installation personnalisée de phpMyAdmin, veuillez consulter cet article.
Parfois, vous ne pouvez pas vous connecter à une base de données en tant qu'utilisateur de base de données référencé dans le DEFINER les attributs. Par exemple, un site qui a été migré depuis un autre fournisseur d'hébergement peut avoir des conventions de nommage MySQL différentes et il peut être impossible de créer un utilisateur de base de données avec le nom correct. Dans ce cas, vous devez procéder comme suit :
- Vide toute la base de données dans un fichier. Pour savoir comment procéder, veuillez consulter cet article.
- Utilisez votre éditeur de texte préféré pour mettre à jour manuellement le DEFINER attributs pour référencer un utilisateur de base de données que vous contrôlez.
- Importez la base de données modifiée dans votre compte. Pour savoir comment procéder, veuillez consulter cet article.
- Testez la nouvelle base de données. Vous devriez maintenant être en mesure de modifier et d'exécuter des objets stockés en utilisant la bonne identité.
Plus d'informations
Pour plus d'informations sur les définisseurs, veuillez visiter https://dev.mysql.com/doc/refman/8.0/en/stored-objects-security.html.