MySQL-fout 1449: de gebruiker opgegeven als een definer bestaat niet

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 DEFINERuitspraken van de dump te verwijderen.

Veranderen van de definitie is later een meer beetje lastig:

Hoe de definitie voor weergaven

te wijzigen

  1. 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';
    
  2. 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 someuserte 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 ALLmachtigingen 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:

  1. Ga naar PHPMyAdmin
  2. Selecteer uw database
  3. Selecteer je tafel
  4. Klik in het bovenste menu op ‘Triggers’
  5. Klik op ‘Bewerken’ om de trigger te bewerken
  6. 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 ROOTdoor uw mysql-gebruikersnaam.
Vervang PASSWORDdoor 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_otherkrijgt 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.sqlFAIL 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.

  1. Inloggen bij database als root (of wat er ook genoeg vermogen heeft om wijzigingen aan te brengen).
  2. Weergave, tafel of waar je problemen mee hebt.
  3. 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:

  1. Maak de gebruiker opnieuw; zoals de andere antwoorden zeggen.
    of
  2. 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

Other episodes