Erreur MySQL 1449: l’utilisateur spécifié comme définisseur n’existe pas

Lorsque je lance la requête suivante, je reçois une erreur:

SELECT `a`.`sl_id` AS `sl_id`, `a`.`quote_id` AS `quote_id`, `a`.`sl_date` AS `sl_date`, `a`.`sl_type` AS `sl_type`, `a`.`sl_status` AS `sl_status`, `b`.`client_id` AS `client_id`, `b`.`business` AS `business`, `b`.`affaire_type` AS `affaire_type`, `b`.`quotation_date` AS `quotation_date`, `b`.`total_sale_price_with_tax` AS `total_sale_price_with_tax`, `b`.`STATUS` AS `status`, `b`.`customer_name` AS `customer_name` FROM `tbl_supplier_list` `a` LEFT JOIN `view_quotes` `b` ON (`b`.`quote_id` = `a`.`quote_id`) LIMIT 0, 30 

Le message d’erreur est le suivant:

 #1449 - The user specified as a definer ('web2vi'@'%') does not exist 

Pourquoi est-ce que je reçois cette erreur? Comment je le répare?

Cela se produit généralement lors de l’exportation de vues / déclencheurs / procédures d’une firebase database ou d’un serveur à un autre, car l’utilisateur qui a créé cet object n’existe plus.

Vous avez deux options:

1. Changer le DEFINER

Cela est peut-être plus facile à faire lors de l’importation initiale de vos objects de firebase database, en supprimant toutes les instructions DEFINER du vidage.

Changer la définition plus tard est un peu plus compliqué:

Comment changer le définition des 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éfinition des procédures stockées

Exemple:

 UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%' 

Faites attention, car cela changera tous les définitions pour toutes les bases de données.

2. Créez l’utilisateur manquant

Si vous avez trouvé l’erreur suivante lors de l’utilisation de la firebase database MySQL:

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

Ensuite, vous pouvez le résoudre en utilisant les éléments suivants:

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

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

Cela a fonctionné comme un charme – il suffit de remplacer someuser par le nom de l’utilisateur manquant. Sur un serveur de développement local, vous pouvez généralement utiliser root .

Pensez également à savoir si vous devez réellement accorder à l’utilisateur ALL permissions ou si elles peuvent utiliser moins.

L’utilisateur qui a initialement créé la vue ou la procédure SQL a été supprimé. Si vous recréez cet utilisateur, il devrait résoudre votre erreur.

Si l’utilisateur existe, alors:

 mysql> flush privileges; 

Créez l’utilisateur supprimé comme ceci:

 mysql> create user 'web2vi'; 

ou

 mysql> create user 'web2vi'@'%'; 

La solution est juste une requête sur une seule ligne comme ci-dessous:

 grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option; 

Remplacez ROOT par votre nom d’utilisateur mysql. Remplacez PASSWORD par votre mot de passe mysql.

Pour les futurs googleurs: J’ai reçu un message similaire en essayant de mettre à jour une table dans une firebase database ne contenant aucune vue. Après quelques fouilles, il s’est avéré que j’avais importé des déclencheurs sur cette table, et ce sont les éléments définis par l’utilisateur inexistant. La suppression des déclencheurs a résolu le problème.

Suivez ces étapes:

  1. Aller à PHPMyAdmin
  2. Sélectionnez votre firebase database
  3. Sélectionnez votre table
  4. Dans le menu principal Cliquez sur “Déclencheurs”
  5. Cliquez sur ‘Modifier’ pour modifier le déclencheur
  6. Changer le paramètre de [utilisateur @ localhost] en root @ localhost

J’espère que cela aide

J’ai eu la même erreur après la mise à jour de mysql.

L’erreur a été corrigée après cette commande:

 mysql_upgrade -u root 

mysql_upgrade devrait être exécuté chaque fois que vous mettez à jour MySQL. Il vérifie toutes les tables de toutes les bases de données à la recherche d’incompatibilités avec la version actuelle du serveur MySQL. Si une table présente une incompatibilité possible, elle est vérifiée. Si des problèmes sont détectés, la table est réparée. mysql_upgrade met également à niveau les tables système afin que vous puissiez tirer parti des nouveaux privilèges ou fonctionnalités qui pourraient avoir été ajoutés.

Corrigé en lançant les commentaires suivants.

 grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option; FLUSH PRIVILEGES; 

Si vous obtenez some_other au lieu de web2vi vous devez changer le nom en conséquence.

L’utilisateur ‘web2vi’ n’existe pas sur votre serveur mysql.

Voir http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user

Si cet utilisateur existe, vérifiez les serveurs auxquels il peut accéder, même si j’aurais pensé que ce serait une erreur différente (par exemple, vous pourriez avoir web2vi @ localhost, mais vous accédez à la firebase database web2vi @% (At any).

solution rapide pour contourner et vider le fichier:

 mysqldump --single-transaction -u root -p xyz_live_db > xyz_live_db_bkup110116.sql 

Mes 5 centimes

J’ai eu la même erreur en essayant de sélectionner dans une vue.

Toutefois, le problème semble être que cette vue, sélectionnée dans une autre vue restaurée à partir d’une sauvegarde depuis un autre serveur.

et en fait, OUI, l’utilisateur n’était pas valide, mais ne savait pas par où commencer.

J’ai eu le même problème avec l’utilisateur root et cela a fonctionné pour moi quand j’ai remplacé

 root@% 

par

 root@localhost 

Donc, si l’utilisateur ‘web2vi’ est autorisé à se connecter depuis ‘localhost’, vous pouvez essayer:

 web2vi@localhost 

Je suis connecté à distance à la firebase database.

Essayez de définir votre procédure en tant que SECURITY INVOKER

Mysql par défaut définit la sécurité des procédures comme “DEFINER” (CREATOR OF) .. vous devez définir la sécurité sur “l’invocateur”.

Dans mon cas, la table avait un déclencheur avec un utilisateur DEFINER qui n’existait pas.

 grant all on *.* to 'username'@'%' identified by 'password' with grant option; 

Exemple:

 grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option; 

Votre vue, “view_quotes” peut avoir été copiée à partir d’une firebase database différente où “web2vi” est un utilisateur valide dans une firebase database où “web2vi” n’est pas un utilisateur valide.
Soit append l’utilisateur “web2vi” à la firebase database, soit modifier la vue (normalement, supprimer la partie DEFINER = ‘web2vi’ @ ‘%’ et exécuter le script fera l’affaire)

Vous pouvez essayer ceci:

 $ mysql -u root -p > grant all privileges on *.* to `root`@`%` identified by 'password'; > flush privileges; 

De la référence MySQL de CREATE VIEW :

Les clauses DEFINER et SQL SECURITY spécifient le contexte de sécurité à utiliser lors de la vérification des privilèges d’access au moment de l’invocation de la vue.

Cet utilisateur doit exister et il est toujours préférable d’utiliser ‘localhost’ comme nom d’hôte. Donc, je pense que si vous vérifiez que l’utilisateur existe et que vous le modifiez en ‘localhost’ lors de la création, vous n’aurez pas cette erreur.

Accédez à la section Modifier la routine et, en bas, modifiez le type de sécurité de Défineur à Invoker.

Le problème est clair: MySQL ne peut pas trouver l’utilisateur spécifié comme défineur.

J’ai rencontré ce problème après avoir synchronisé le modèle de firebase database à partir du serveur de développement, en l’appliquant à localhost, en apportant des modifications au modèle, puis en le réappliquant à localhost. Apparemment, une vue (que j’ai modifiée) a été définie et je ne pouvais donc pas mettre à jour ma version locale.

Comment réparer (facilement) :

Remarque: cela implique la suppression afin que cela fonctionne correctement pour les vues, mais assurez-vous que vous avez sauvegardé les données si vous essayez ceci sur des tables.

  1. Connectez-vous à la firebase database en tant que root (ou tout ce qui est assez puissant pour apporter des modifications).
  2. Supprimez la vue, la table ou tout ce qui pose problème.
  3. Synchronisez votre nouveau modèle – il ne se plaindra pas de quelque chose qui n’existe pas maintenant. Vous souhaiterez peut-être supprimer la partie SQL SECURITY DEFINER de la définition d’élément avec laquelle vous aviez des problèmes.

PS Ce n’est ni un correctif correct ni un correctif complet. Je viens de le poster comme une solution possible (et très simple).

J’ai eu le même problème il y a quelques minutes, j’ai rencontré ce problème après avoir supprimé un utilisateur inutilisé de la table mysql.user, mais en corrigeant une vue alter, voici une commande très simple:

 SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name," AS ", view_definition,";") FROM information_schema.views WHERE table_schema='databasename' 

Mélangez ceci avec la ligne de commande mysql (en supposant que * nix, pas familier avec Windows):

 > echo above_query | mysql -uuser -p > alterView.sql > mysql -uuser -ppass databasename < alterView.sql 

Note: la commande génère un SELECT CONCAT supplémentaire sur le fichier, faisant que mysql -uuser -ppass databasename < alterView.sql échoue si vous ne le supprimez pas.

Source: https://dba.stackexchange.com/questions/4129/modify-definer-on-many-views

Une ou plusieurs de vos vues ont été créées / enregistrées par un autre utilisateur. Vous devrez vérifier le propriétaire de la vue et:

  1. Recréer l’utilisateur; comme le disent les autres réponses. ou
  2. Recréez les vues créées par l’utilisateur 'web2vi' utilisant ALTER VIEW

J’ai eu ce problème une fois.

J’essayais de migrer des vues, de BD1 à BD2, en utilisant SQLYog. SQLYog a recréé les vues dans l’autre firebase database (DB2), mais il a gardé l’utilisateur de BD1 (elles étaient différentes). Plus tard, j’ai réalisé que les vues que j’utilisais dans ma requête avaient la même erreur que vous, même si je ne créais aucune vue.

J’espère que cette aide

S’il s’agit d’une procédure stockée, vous pouvez faire:

 UPDATE `mysql`.`proc` SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore' 

Mais ceci n’est pas conseillé.

Pour moi, mieux vaut créer le défineur:

 create user 'myuser' identified by 'mypass'; grant all on `mytable`.* to 'myuser' identified by 'mypass'; 

Lorsque mysql.proc est vide, mais que le système remarque toujours “user@192.168.%” pour nom_table no exist, vous n’avez qu’à rooter la ligne de commande mysql et tapez:

 CHECK TABLE `database`.`table_name` QUICK FAST MEDIUM CHANGED; flush privileges; 

plus de!

Pourquoi est-ce que je reçois cette erreur? Comment je le répare?

J’ai passé une heure avant de trouver une décision pour un problème comme celui-ci. Mais, dans mon cas, j’ai couru ceci:

 mysql> UPDATE `users` SET `somefield` = 1 WHERE `user_id` = 2; ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist 

Si vous voulez vraiment trouver le problème, lancez simplement ces commandes une par une:

 SHOW PROCEDURE STATUS; SHOW FUNCTION STATUS; SHOW TRIGGERS; SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW'; 

… et après chacun d’eux, cherchez le champ ‘definer’.

Dans mon cas, c’était un vieux déclencheur barbu, que quelqu’un des développeurs avait oublié de supprimer.

Cela m’est arrivé après avoir importé une sauvegarde sur Windows 10 avec la communauté MYSQL Workbench 6.3, avec “root @% n’existe pas”. Même si l’utilisateur existait. J’ai d’abord essayé de commenter le DEFINER mais cela n’a pas fonctionné. J’ai ensuite fait une chaîne remplacer “root @%” par “root @ localhost” et réimporté le dump. Cela a fait le tour pour moi.

L’utilisateur de la firebase database semble également sensible à la casse, alors que j’avais un utilisateur racine ‘@’%, mais que je n’avais pas d’utilisateur ROOT ‘@’%. J’ai changé l’utilisateur pour qu’il soit en majuscule via Workbench et le problème a été résolu!

dans mon cas, j’avais un déclencheur sur cette table que je ne pouvais pas mettre à jour les données en obtenant la même erreur.

Erreur MySQL 1449: l’utilisateur spécifié comme définisseur n’existe pas

la solution consistait à supprimer les déclencheurs de cette table et à les recréer, ce qui a résolu le problème, car le déclencheur avait été créé avec un autre utilisateur d’un autre serveur et le nom d’utilisateur avait changé sur le nouveau serveur après avoir changé de société d’hébergement. c’est mon 2 cents

Je suis venu ici pour le même problème, je ne pouvais pas trouver n’importe où dans mon code où un certain utilisateur faisait l’action. apparemment, c’était à partir d’un déclencheur qui utilisait un utilisateur longtemps supprimé (la firebase database a été restaurée à partir d’une ancienne version), donc si vous êtes insortinggué, jetez un coup d’oeil à vos événements / déclencheurs / routines de firebase database. J’espère que cela aidera quelqu’un.