K tomu běžně dochází, když exportujete pohledy/spouštěče/procedury z jedné databáze nebo serveru na jiný, protože uživatel, který vytvořil daný objekt, již neexistuje.
Máte dvě možnosti:
1. Změňte DEFINER
To je možná nejjednodušší provést při prvotním importu databázových objektů odstraněním DEFINER
výpisy z výpisu.
Změna definice později je trochu složitější:
Jak změnit definici zobrazení
-
Spuštěním tohoto SQL vygenerujte potřebné příkazy ALTER
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Zkopírujte a spusťte příkazy ALTER
Jak změnit definici uložených procedur
Příklad:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Buďte opatrní, protože to změní všechny definice pro všechny databáze.
2. Vytvořte chybějícího uživatele
Pokud jste při používání databáze MySQL našli následující chybu:
The user specified as a definer ('someuser'@'%') does not exist`
Pak to můžete vyřešit pomocí následujícího:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Z http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Fungovalo to jako kouzlo – stačí změnit someuser
na jméno chybějícího uživatele. Na místním dev serveru můžete obvykle použít pouze root
.
Zvažte také, zda skutečně potřebujete uživateli udělit ALL
oprávnění nebo zda by si vystačili s méně.