Lorsque j'exécute la requête suivante, j'obtiens 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:
#1449 - The user specified as a definer ('web2vi'@'%') does not exist
Pourquoi ai-je cette erreur? Comment je le répare?
mysql
permissions
Tech MLG
la source
la source
view_quotes
vue.Réponses:
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. Changez le DEFINER
C'est probablement plus facile à faire lors de l'importation initiale de vos objets de base de données, en supprimant toutes les
DEFINER
instructions du vidage.Changer le définisseur plus tard est un peu plus délicat:
Comment changer le définisseur pour les vues
Exécutez ce SQL pour générer les instructions ALTER nécessaires
Copiez et exécutez les instructions ALTER
Comment changer le définisseur pour les procédures stockées
Exemple:
Soyez prudent, car cela changera tous les définisseurs pour toutes les bases de données.
2. Créez l'utilisateur manquant
Sur 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
le nom de l'utilisateur manquant. Sur un serveur de développement local, vous pouvez généralement simplement utiliserroot
.Demandez-vous également si vous devez réellement accorder des
ALL
autorisations aux utilisateurs ou s'ils pourraient en faire moins.la source
mysql
.proc
P SET definer = 'user @%' WHERE definer = 'root @%'" car les définisseurs des procédures ne sont alors actualisés que.DEFINER=`user`@`host`
et de la réimporter. A fonctionné comme un charme. : ok_hand:L'utilisateur qui a initialement créé la vue ou la procédure SQL a été supprimé. Si vous recréez cet utilisateur, il devrait corriger votre erreur.
la source
SELECT
etEXECUTE
à l'utilisateur ajouté. J'ai rencontré cela lorsque j'ai exporté une sauvegarde de base de données d'un serveur vers un autre où l'utilisateur qui a créé les routines n'existait pas sur le serveur de test.DROP
puis de réCREATE
-utiliser) un utilisateur valide sur le système cible.UPDATE mysql.proc SET definer = 'my_new_user@localhost' WHERE db = 'mydatatbase';
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
J'ai eu la même erreur après la mise à jour de mysql.
L'erreur a été corrigée après cette commande:
la source
Si l'utilisateur existe, alors:
la source
Créez l'utilisateur supprimé comme ceci:
ou
la source
ERROR 1142 (42000): TRIGGER command denied to user 'web2vi'@'%' for table 'foo'
et devrait ajouter cette commandegrant all on *.* to 'web2vi'@'%' identified by ''
après avoir créé l'utilisateurSuivez ces étapes:
J'espère que cela aide
la source
La solution est juste une requête sur une seule ligne comme ci-dessous:
Remplacez
ROOT
par votre nom d'utilisateur mysql. RemplacezPASSWORD
par votre mot de passe mysql.la source
flush privileges
après ça et ça marche. Merci.Corrigé en exécutant les commentaires suivants.
si vous obtenez
some_other
au lieu deweb2vi
alors vous devez changer le nom en conséquence.la source
Pour les futurs googleurs: j'ai reçu un message similaire en essayant de mettre à jour une table dans une base de données qui ne contenait aucune vue. Après quelques recherches, il s'est avéré que j'avais importé des déclencheurs sur cette table, et ce sont les choses définies par l'utilisateur inexistant. La suppression des déclencheurs a résolu le problème.
la source
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 à quels serveurs il peut accéder, bien que j'aurais pensé que ce serait une erreur différente (par exemple, vous pourriez avoir web2vi @ localhost, mais vous accédez à la base de données en tant que web2vi @% (à tout)
la source
solution rapide pour contourner et vider le fichier:
la source
--single-transaction
modifie apparemment la façon dont Lock Tables est implémenté lors d'un vidage. Ou quelque chose comme ça. Je ne me souviens pas où je l'ai lu, mais cela m'a aidé à me sentir à l'aise de "simplement lancer le drapeau". Je suis également mal à l'aise avec les «réponses» inexpliquées «faites-le». Quoi qu'il en soit, cela a fonctionné pour mon cas.exemple:
la source
Cela m'est arrivé après avoir déplacé la base de données d'un serveur vers un autre serveur. Initialement, le définisseur utilisait localhost et l'utilisateur. Sur le nouveau serveur, nous n'avons pas cet utilisateur et l'hôte a également été changé. J'ai pris une sauvegarde de cette table particulière et supprimé manuellement tous les déclencheurs de phpmyadmin . Après cela, cela a bien fonctionné pour moi.
la source
J'ai eu le même problème avec l'utilisateur root et cela a fonctionné pour moi quand j'ai remplacé
par
Donc, si l'utilisateur 'web2vi' est autorisé à se connecter depuis 'localhost', vous pouvez essayer:
Je suis connecté à distance à la base de données.
la source
Mes 5 cents.
J'ai eu la même erreur pendant que j'essayais de sélectionner dans une vue.
Cependant, le problème semble être que cette vue, sélectionnée à partir d'une autre vue qui a été restaurée à partir d'une sauvegarde à partir d'un serveur différent.
et en fait, OUI, l'utilisateur n'était pas valide, mais il n'était pas évident d'où aller au premier regard.
la source
J'ai eu votre 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 effectuant une autre vue, il est résolu, voici une commande pratique qui le rend très simple:
Mélangez cela avec la ligne de commande mysql (en supposant que * nix, pas familier avec Windows):
Remarque: la commande génère et SELECT CONCAT supplémentaire sur le fichier, faisant
mysql -uuser -ppass databasename < alterView.sql
échouer si vous ne le supprimez pas.Source: /dba/4129/modify-definer-on-many-views
la source
Essayez de définir votre procédure comme
SECURITY INVOKER
Mysql définit par défaut la sécurité des procédures comme "DEFINER" (CREATEUR DE) .. vous devez définir la sécurité sur "l'invocateur".
la source
Votre vue, "view_quotes" peut avoir été copiée d'une autre base de données où "web2vi" est un utilisateur valide dans une base de données où "web2vi" n'est pas un utilisateur valide.
Ajoutez l'utilisateur "web2vi" à la base de données ou modifiez la vue (en supprimant normalement la partie DEFINER = 'web2vi' @ '%' et en exécutant le script fera l'affaire)
la source
Dans mon cas, la table avait un déclencheur avec un utilisateur DEFINER qui n'existait pas.
la source
D'après la référence MySQL de
CREATE VIEW
:Cet utilisateur doit exister et il est toujours préférable d'utiliser «localhost» comme nom d'hôte. Je pense donc que si vous vérifiez que l'utilisateur existe et que vous le changez en «localhost» lors de la création de la vue, vous n'aurez pas cette erreur.
la source
Le problème est clair - MySQL ne peut pas trouver l'utilisateur spécifié comme définisseur.
J'ai rencontré ce problème après avoir synchronisé le modèle de base de données à partir du serveur de développement, l'avoir appliqué à localhost, apporté des modifications au modèle, puis le réappliquer à localhost. Apparemment, une vue (que j'ai modifiée) a été définie et je n'ai donc pas pu mettre à jour ma version locale.
Comment réparer (facilement) :
Remarque: cela implique la suppression, donc cela fonctionne très bien pour les vues, mais assurez-vous que les données sont sauvegardées si vous essayez cela sur des tables.
PS Ce n'est ni une solution correcte ni la meilleure solution. Je viens de le poster comme une solution possible (et très simple).
la source
Vous pouvez essayer ceci:
la source
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:
Si vous voulez vraiment trouver le problème, exécutez simplement ces commandes une par une:
... et, après chacun d'eux, recherchez le champ "definer".
Dans mon cas, c'était un vieux déclencheur barbu, que quelqu'un de développeurs avait oublié de supprimer.
la source
Allez dans la section d'édition de routine et, en bas, changez le type de sécurité de Definer en Invoker.
la source
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:
'web2vi'
aide de ALTER VIEWJ'ai eu ce problème une fois.
J'essayais de migrer des vues, de BD1 à BD2, à l'aide de SQLYog. SQLYog a recréé les vues dans l'autre DataBase (DB2), mais il a conservé l'utilisateur de BD1 (ils étaient différents). 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 lorsque je ne créais aucune vue.
J'espère que cette aide.
la source
S'il s'agit d'une procédure stockée, vous pouvez effectuer:
Mais ce n'est pas conseillé.
Pour moi, la meilleure solution est de créer le définisseur:
la source
lorsque mysql.proc est vide, mais que le système remarque toujours "[email protected].%" pour nom_table n'existe pas, il vous suffit de rooter dans la ligne de commande mysql et de taper:
plus de!
la source
Cela m'est arrivé après avoir importé un vidage 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 remplacé une chaîne sur "root @%" par "root @ localhost" et j'ai réimporté le vidage. Cela a fait l'affaire pour moi.
la source
Essayez ceci C'est une solution simple
plus sur https://stackoverflow.com/a/42183702/5407056
la source
L'utilisateur de la base de données semble également être sensible à la casse, donc même si j'avais un utilisateur racine '@'%, je n'avais pas d'utilisateur ROOT '@'%. J'ai changé l'utilisateur pour qu'il soit en majuscules via le plan de travail et le problème a été résolu!
la source