Mysql
 sql >> Base de données >  >> RDS >> Mysql

Erreur MySQL 1449 :l'utilisateur spécifié en tant que définisseur n'existe pas

Cela se produit généralement lors de l'exportation de vues/déclencheurs/procédures d'une base de données ou d'un serveur vers un autre, car l'utilisateur qui a créé cet objet n'existe plus.

Vous avez deux options :

1. Changer le DEFINEUR

C'est peut-être plus facile à faire lors de l'importation initiale de vos objets de base de données, en supprimant tout DEFINER déclarations du vidage.

Changer le définisseur plus tard est un peu plus délicat :

Comment changer le définisseur pour les vues

  1. Exécutez ce SQL pour générer les instructions ALTER nécessaires

    SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
    table_name, " AS ", view_definition, ";") 
    FROM information_schema.views 
    WHERE table_schema='your-database-name';
    
  2. Copiez et exécutez les instructions ALTER

Comment changer le définiteur pour les procédures stockées

Exemple :

UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'

Soyez prudent, car cela modifiera tous les définisseurs pour toutes les bases de données.

2. Créer l'utilisateur manquant

Si vous avez trouvé l'erreur suivante lors de l'utilisation de la base de données MySQL :

The user specified as a definer ('someuser'@'%') does not exist`

Ensuite, vous pouvez le résoudre en utilisant ce qui suit :

GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;

Depuis http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

Cela a fonctionné comme un charme - vous n'avez qu'à changer someuser au nom de l'utilisateur manquant. Sur un serveur de développement local, vous pouvez généralement simplement utiliser root .

Déterminez également si vous devez réellement accorder à l'utilisateur ALL autorisations ou s'ils pouvaient faire avec moins.