sql >> Database >  >> RDS >> Mysql

MySQL-fout 1449:de gebruiker die is opgegeven als definitie bestaat niet

Dit komt vaak voor bij het exporteren van views/triggers/procedures van de ene database of server naar de andere, aangezien de gebruiker die dat object heeft gemaakt niet meer bestaat.

Je hebt twee opties:

1. Wijzig de DEFINER

Dit is mogelijk het gemakkelijkst te doen wanneer u uw database-objecten voor het eerst importeert, door eventuele DEFINER . te verwijderen verklaringen van de stortplaats.

Het later wijzigen van de definitie is wat lastiger:

De definitie voor weergaven wijzigen

  1. Voer deze SQL uit om de benodigde ALTER-instructies 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 ALTER-instructies uit

De definitie voor opgeslagen procedures wijzigen

Voorbeeld:

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

Wees voorzichtig, want hierdoor worden alle definities voor alle databases gewijzigd.

2. Maak de ontbrekende gebruiker

Als u de volgende fout hebt gevonden tijdens het gebruik van de MySQL-database:

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

Dan kun je het oplossen 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 tierelier - je hoeft alleen maar someuser te veranderen naar de naam van de ontbrekende gebruiker. Op een lokale ontwikkelserver zou je normaal gesproken gewoon root . kunnen gebruiken .

Overweeg ook of u de gebruiker daadwerkelijk ALL . moet toekennen permissies of dat ze met minder zouden kunnen doen.



  1. Postgres-functie NULL-waarde voor rij die verwijst naar NEW

  2. MySQL DROP UNIEKE BEPERKING

  3. Diadekken en voorbeelden van #SQLintersection

  4. De resultaten van een opgeslagen procedure invoegen in een tijdelijke tabel in SQL Server