Mysql
 sql >> Database >  >> RDS >> Mysql

Errore MySQL 1449:l'utente specificato come definitore non esiste

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

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