Wanneer ik de volgende zoekopdracht uitvoer, krijg ik een foutmelding:
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
Het foutbericht is:
#1449 - The user specified as a definer ('web2vi'@'%') does not exist
Waarom krijg ik die fout? Hoe repareer ik het?
Antwoord 1, Autoriteit 100%
Dit gebeurt gewoonlijk bij het exporteren van weergaven / triggers / procedures van de ene database of server naar de andere als de gebruiker die het doel heeft gemaakt dat niet langer bestaat.
U hebt twee opties:
1. Verander de definitie
Dit is mogelijk het gemakkelijkst te doen bij het aanvullen van uw database-objecten, door een DEFINER
uitspraken van de dump te verwijderen.
Veranderen van de definitie is later een meer beetje lastig:
Hoe de definitie voor weergaven
te wijzigen
-
Voer deze SQL uit om de noodzakelijke algemene uitspraken
te genereren
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Kopieer en voer de wijzingsverklaringen
Hoe de definitie te wijzigen voor opgeslagen procedures
Voorbeeld:
UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'
Wees voorzichtig, omdat dit alle definities voor alle databases zal veranderen.
2. Maak de ontbrekende gebruiker
Als u de volgende foutmelding hebt gevonden tijdens het gebruik van MySQL-database:
The user specified as a definer ('someuser'@'%') does not exist`
dan kunt u oplossen
het door het volgende te gebruiken:GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
van http: // www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Dit werkte als een charme – u hoeft alleen someuser
te wijzigen op de naam van de ontbrekende gebruiker. Op een lokale dev-server kunt u gewoonlijk gewoon gebruiken ROOT
.
Overweeg ook of u de gebruiker ALL
machtigingen wilt verlenen of of ze met minder kunnen doen.
Antwoord 2, Autoriteit 22%
De gebruiker die oorspronkelijk de SQL-weergave of de procedure heeft gemaakt, is verwijderd. Als u die gebruiker opnieuw maakt, moet deze uw fout aanpakken.
Antwoord 3, Autoriteit 8%
Ik heb dezelfde foutmelding na het bijwerken van MySQL.
De fout is opgelost na deze opdracht:
mysql_upgrade -u root
MySQL_UPGRADE moet elke keer worden uitgevoerd als u MySQL upgrade. Het
controleert alle tabellen in alle databases voor incompatibele producten met de
Huidige versie van MySQL Server. Als een tafel blijkt te hebben
mogelijke incompatibiliteit wordt gecontroleerd. Als er problemen worden gevonden,
de tafel is gerepareerd. mysql_upgrade upgradet ook de systeemtabellen
zodat u kunt profiteren van nieuwe privileges of mogelijkheden die:
is mogelijk toegevoegd.
Antwoord 4, autoriteit 7%
Volg deze stappen:
- Ga naar PHPMyAdmin
- Selecteer uw database
- Selecteer je tafel
- Klik in het bovenste menu op ‘Triggers’
- Klik op ‘Bewerken’ om de trigger te bewerken
- Verander de definitie van [user@localhost] in root@localhost
Hopelijk helpt het
Antwoord 5, autoriteit 6%
Als de gebruiker bestaat, dan:
mysql> flush privileges;
Antwoord 6, autoriteit 5%
Maak de verwijderde gebruiker als volgt aan:
mysql> create user 'web2vi';
of
mysql> create user 'web2vi'@'%';
Antwoord 7, autoriteit 4%
Oplossing is slechts een enkele regelquery zoals hieronder:
grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;
Vervang ROOT
door uw mysql-gebruikersnaam.
Vervang PASSWORD
door uw mysql-wachtwoord.
Antwoord 8, autoriteit 2%
Opgelost door deze volgende opmerkingen uit te voeren.
grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;
als u some_other
krijgt in plaats van web2vi
, moet u de naam dienovereenkomstig wijzigen.
Antwoord 9, autoriteit 2%
Voor toekomstige googlers: ik kreeg een soortgelijk bericht toen ik probeerde een tabel bij te werken in een database die geen weergaven bevatte. Na wat graven bleek dat ik triggers op die tafel had geïmporteerd, en dat waren de dingen die werden gedefinieerd door de niet-bestaande gebruiker. Het laten vallen van de triggers loste het probleem op.
Antwoord 10
grant all on *.* to 'username'@'%' identified by 'password' with grant option;
voorbeeld:
grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;
Antwoord 11
snelle oplossing om het bestand te omzeilen en te dumpen:
mysqldump --single-transaction -u root -p xyz_live_db > xyz_live_db_bkup110116.sql
Antwoord 12
Ik had hetzelfde probleem met root-gebruiker en het werkte voor mij toen ik
. verving
root@%
door
root@localhost
Dus, als de gebruiker ‘web2vi’ verbinding mag maken vanaf ‘localhost’, kun je het volgende proberen:
web2vi@localhost
Ik ben op afstand verbonden met de database.
Antwoord 13
De gebruiker ‘web2vi’ bestaat niet op uw mysql-server.
Zie http://dev.mysql.com/doc/ refman/5.1/en/error-messages-server.html#error_er_no_such_user
Als die gebruiker bestaat, controleer dan vanaf welke servers hij toegang heeft, hoewel ik had gedacht dat dat een andere fout zou zijn (U hebt bijvoorbeeld web2vi@localhost, maar u gebruikt de db als web2vi@% )
Antwoord 14
Dit overkwam mij nadat ik de database van de ene server naar een andere server had verplaatst. Aanvankelijk gebruikte de definiëring localhost en de gebruiker. Op de nieuwe server hebben we die gebruiker niet, en de host was ook veranderd. Ik nam een back-up van die specifieke tabel en verwijderde alle triggers handmatig uit phpmyadmin. Daarna werkte het prima voor mij.
Antwoord 15
Waarom krijg ik die fout? Hoe repareer ik het?
Ik heb een uur eerder doorgebracht voordat ik een beslissing had gevonden voor een probleem zoals deze. Maar in mijn geval liep ik dit:
mysql> UPDATE `users` SET `somefield` = 1 WHERE `user_id` = 2;
ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist
Als u echt het probleem wilt vinden, voert u deze opdrachten één voor één uit:
SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
SHOW TRIGGERS;
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';
… en na elk van hen zoekt u naar het veld ‘Definer’.
In mijn geval was het bebaarde oude trigger, dat iemand van ontwikkelaars vergat te verwijderen.
Antwoord 16
MIJN 5 CENTEN.
Ik had dezelfde fout terwijl ik probeerde te selecteren uit een weergave.
Het probleem lijkt echter dat deze weergave is geselecteerd uit een andere weergave die is hersteld van back-up van verschillende server.
En in feite, ja, de gebruiker was ongeldig, maar was niet voor de hand liggend waar van de eerste uitstraling.
Antwoord 17
Ik had je dezelfde probleemminuten geleden, ik liep dit probleem in nadat ik een ongebruikte gebruiker van MySQl.User tabel had verwijderd, maar een alter-weergave heeft opgelost, hier is een handig commando dat het heel eenvoudig maakt:
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ",
table_name," AS ", view_definition,";") FROM
information_schema.views WHERE table_schema='databasename'
Meng dit met de MySQL-opdrachtregel (aannemen * NIX, niet bekend met Windows):
> echo above_query | mysql -uuser -p > alterView.sql
> mysql -uuser -ppass databasename < alterView.sql
Opmerking: de opdracht genereert en Extra Select CONCAT in het bestand, waardoor mysql -uuser -ppass databasename < alterView.sql
FAIL ALS JE HET NIET VERWIJDERT.
Bron: https://dba.stackexchange.com/questions/4129/modify -Definer-op-vele weergaven
Antwoord 18
Probeer uw procedure in te stellen als
SECURITY INVOKER
MySQL Standard Sets Procedures Beveiliging als “Definer” (Schepper van) .. U moet de beveiliging instellen op de “Invoker”.
Antwoord 19
Uw weergave, “View_quotes” zijn mogelijk gekopieerd vanuit een andere database waarin “Web2VI” een geldige gebruiker is in een database waarin “Web2VI” geen geldige gebruiker is.
Voeg de “Web2vi” -gebruiker toe aan de database of wijzig het weergave (normaal verwijdert de definitie = ‘Web2vi’ @ ‘%’ deel en het uitvoeren van het script zal de truc doen)
Antwoord 20
In mijn geval had de tabel een trigger met een definitieve gebruiker die niet bestond.
Antwoord 21
van mysql referentie van CREATE VIEW
:
De definitie- en SQL-beveiligingsclausules specificeren de beveiligingscontext die moet worden gebruikt bij het controleren van toegangsrechten bij het bekijken van aanroepstijd.
Deze gebruiker moet bestaan en is altijd beter om ‘localhost’ als hostnaam te gebruiken. Dus ik denk dat als je controleert of de gebruiker het is en het in te wijzen op ‘localhost’ in Create Weergave heb je deze fout niet.
Antwoord 22
Het probleem is duidelijk – MySQL kan de gebruiker niet vinden die is opgegeven als de definitie.
Ik heb dit probleem tegengekomen na het synchroniseren van databasemodel van Development Server, die het aan LocalHost aanbrengt, wijzigingen in het model aanbelepen en vervolgens opnieuw toepassen op localhost. Blijkbaar was er een aanzicht (i aangepast) gedefinieerd en dus kon ik mijn lokale versie niet bijwerken.
Hoe (eenvoudig) :
OPMERKING: het gaat om het verwijderen, zodat het prima werkt voor het meningen, maar zorg ervoor dat u gegevens hebt gemaakt als u dit op tabellen probeert.
- Inloggen bij database als root (of wat er ook genoeg vermogen heeft om wijzigingen aan te brengen).
- Weergave, tafel of waar je problemen mee hebt.
- Synchroniseer je nieuwe model – het zal niet klagen over iets dat nu niet bestaat. Misschien wilt u het gedeelte SQL SECURITY DEFINERverwijderen uit de itemdefinitie waarmee u problemen had.
P.S. Dit is noch een goede, noch de beste oplossing. Ik heb het zojuist gepost als een mogelijke (en zeer eenvoudige) oplossing.
Antwoord 23
Je kunt dit proberen:
$ mysql -u root -p
> grant all privileges on *.* to `root`@`%` identified by 'password';
> flush privileges;
Antwoord 24
Ga naar het gedeelte met de bewerkingsroutine en verander onderaan het Beveiligingstype van Definer in Invoker.
Antwoord 25
Een of meer van uw weergaven zijn gemaakt/geregistreerd door een andere gebruiker. U moet de eigenaar van de weergave controleren en:
- Maak de gebruiker opnieuw; zoals de andere antwoorden zeggen.
of - Maak de weergaven opnieuw die zijn gemaakt door de gebruiker
'web2vi'
met behulp van WEERGAVE WIJZIGEN
Ik heb dit probleem ooit gehad.
Ik probeerde weergaven van BD1 naar BD2 te migreren met SQLYog. SQLYog heeft de weergaven in de andere DataBase (DB2) opnieuw gemaakt, maar de gebruiker van BD1 behouden (ze waren anders). Later realiseerde ik me dat de weergaven die ik in mijn zoekopdracht gebruikte dezelfde fout hadden als jij, zelfs als ik geen weergave aan het maken was.
Hoop dat dit helpt.
Antwoord 26
Als dit een opgeslagen procedure is, kunt u het volgende doen:
UPDATE `mysql`.`proc` SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'
Maar dit wordt niet geadviseerd.
Voor mij is een betere oplossing om de definitie te maken:
create user 'myuser' identified by 'mypass';
grant all on `mytable`.* to 'myuser' identified by 'mypass';
Antwoord 27
wanneer mysql.proc leeg is, maar het systeem merkt altijd dat “[email protected].%” voor table_name niet bestaat, root je gewoon in de mysql-opdrachtregel en typ je:
CHECK TABLE `database`.`table_name` QUICK FAST MEDIUM CHANGED;
flush privileges;
over!
Antwoord 28
in mijn geval had ik een trigger op die tafel dat ik de gegevens niet kon bijwerken met dezelfde fout.
MySQL-fout 1449: de gebruiker die is opgegeven als definitie bestaat niet
de oplossing was om de triggers op die tafel te verwijderen en ze opnieuw te maken, dit loste het probleem op, aangezien de trigger werd gemaakt met een andere gebruiker van een andere server en de gebruikersnaam op de nieuwe server veranderde nadat van hostingbedrijf was veranderd. dat is mijn 2 cent
Antwoord 29
ik kwam hier voor hetzelfde probleem, ik kon nergens in mijn code vinden waar een bepaalde gebruiker de actie uitvoerde.
blijkbaar was het van een trigger die een gebruiker gebruikte die al lang was verwijderd (db werd hersteld van een oudere versie)
dus als je net als ik in de war bent, kijk dan eens naar je db-gebeurtenissen/triggers/routines.
hoop dat dit iemand zal helpen.
Antwoord 30
Probeer het volgende:
mysqldump --routines --single-transaction -u root -proot portalv3 > c:\portal.sql