Ciò si verifica comunemente quando si esportano viste/trigger/procedure da un database o server a un altro poiché l'utente che ha creato quell'oggetto non esiste più.
Hai due opzioni:
1. Cambia il DEFINER
Questo è probabilmente più facile da fare quando si importano inizialmente gli oggetti del database, rimuovendo qualsiasi DEFINER
dichiarazioni dal dump.
Modificare il definitore in un secondo momento è un po' più complicato:
Come modificare il definitore per le viste
-
Esegui questo SQL per generare le istruzioni ALTER necessarie
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Copia ed esegui le istruzioni ALTER
Come modificare il definitore per le procedure archiviate
Esempio:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Fai attenzione, perché questo cambierà tutti i definitori per tutti i database.
2. Crea l'utente scomparso
Se hai riscontrato il seguente errore durante l'utilizzo del database MySQL:
The user specified as a definer ('someuser'@'%') does not exist`
Quindi puoi risolverlo usando quanto segue:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;
Da http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Ha funzionato come un incantesimo:devi solo cambiare someuser
al nome dell'utente scomparso. Su un server di sviluppo locale, in genere potresti semplicemente usare root
.
Considera anche se devi effettivamente concedere all'utente ALL
autorizzazioni o se potrebbero fare con meno.