Esto suele ocurrir cuando se exportan vistas/desencadenadores/procedimientos de una base de datos o servidor a otro, ya que el usuario que creó ese objeto ya no existe.
Tienes dos opciones:
1. Cambiar el DEFINITOR
Esto es posiblemente más fácil de hacer al importar inicialmente los objetos de su base de datos, eliminando cualquier DEFINER
declaraciones del basurero.
Cambiar el definidor más tarde es un poco más complicado:
Cómo cambiar el definidor de vistas
-
Ejecute este SQL para generar las sentencias ALTER necesarias
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", table_name, " AS ", view_definition, ";") FROM information_schema.views WHERE table_schema='your-database-name';
-
Copie y ejecute las sentencias ALTER
Cómo cambiar el definidor de procedimientos almacenados
Ejemplo:
UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'
Tenga cuidado, porque esto cambiará todos los definidores de todas las bases de datos.
2. Crear el usuario que falta
Si ha encontrado el siguiente error al usar la base de datos MySQL:
The user specified as a definer ('someuser'@'%') does not exist`
Entonces puedes resolverlo usando lo siguiente:
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;
De http://www .lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Esto funcionó de maravilla:solo tiene que cambiar someuser
al nombre del usuario que falta. En un servidor de desarrollo local, normalmente solo puede usar root
.
Considere también si realmente necesita otorgar al usuario ALL
permisos o si les vendría bien menos.