Detta inträffar vanligtvis när man exporterar vyer/triggers/procedurer från en databas eller server till en annan eftersom användaren som skapade det objektet inte längre existerar.
Du har två alternativ:
1. Ändra DEFINER
Detta är möjligen lättast att göra när du initialt importerar dina databasobjekt, genom att ta bort någon DEFINER
uttalanden från soptippen.
Att ändra definieraren senare är lite mer knepigt:
Hur du ändrar definieraren för vyer
-
Kör denna SQL för att generera nödvändiga ALTER-satser
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Kopiera och kör ALTER-satserna
Hur du ändrar definieraren för lagrade procedurer
Exempel:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Var försiktig, eftersom detta kommer att ändra alla definierare för alla databaser.
2. Skapa den saknade användaren
Om du har hittat följande fel när du använder MySQL-databasen:
The user specified as a definer ('someuser'@'%') does not exist`
Sedan kan du lösa det genom att använda följande :
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Från http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Detta fungerade som en charm - du behöver bara ändra someuser
till namnet på den saknade användaren. På en lokal dev-server kanske du vanligtvis bara använder root
.
Fundera också på om du verkligen behöver ge användaren ALL
behörigheter eller om de skulle kunna göra med mindre.