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
-
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';
-
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.