Cuando ejecuto la siguiente consulta me sale un error:
SELECT
`a`.`sl_id` AS `sl_id`,
`a`.`quote_id` AS `quote_id`,
`a`.`sl_date` AS `sl_date`,
`a`.`sl_type` AS `sl_type`,
`a`.`sl_status` AS `sl_status`,
`b`.`client_id` AS `client_id`,
`b`.`business` AS `business`,
`b`.`affaire_type` AS `affaire_type`,
`b`.`quotation_date` AS `quotation_date`,
`b`.`total_sale_price_with_tax` AS `total_sale_price_with_tax`,
`b`.`STATUS` AS `status`,
`b`.`customer_name` AS `customer_name`
FROM `tbl_supplier_list` `a`
LEFT JOIN `view_quotes` `b`
ON (`b`.`quote_id` = `a`.`quote_id`)
LIMIT 0, 30
El mensaje de error es:
#1449 - The user specified as a definer ('web2vi'@'%') does not exist
¿Por qué recibo ese error? ¿Cómo lo soluciono?
mysql
permissions
Tech MLG
fuente
fuente
view_quotes
vista.Respuestas:
Esto ocurre comúnmente al exportar vistas / disparadores / 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 DEFINER
Esto es posiblemente más fácil de hacer cuando se importan inicialmente los objetos de la base de datos, eliminando las
DEFINER
declaraciones del volcado.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 declaraciones ALTER necesarias
Copie y ejecute las declaraciones ALTER
Cómo cambiar el definidor para procedimientos almacenados
Ejemplo:
Tenga cuidado, porque esto cambiará todos los definidores para todas las bases de datos.
2. Crear el usuario perdido
De http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Esto funcionó a las mil maravillas: solo tiene que cambiar
someuser
el nombre del usuario perdido. En un servidor de desarrollo local, normalmente puede usarloroot
.Considere también si realmente necesita otorgar
ALL
permisos de usuario o si podrían hacerlo con menos.fuente
mysql
.proc
P SET definer = 'user @%' WHERE definer = 'root @%'" ya que los definidores de los procedimientos solo se actualizan en ese momento.DEFINER=`user`@`host`
y la reimporté. Trabajado como un encanto. : ok_hand:El usuario que creó originalmente la vista o procedimiento SQL ha sido eliminado. Si vuelve a crear ese usuario, debería abordar su error.
fuente
SELECT
yEXECUTE
al usuario agregado. Me encontré con esto cuando exporté una copia de seguridad de DB de un servidor a otro donde el usuario que creó las rutinas no existía en el servidor de prueba.DROP
luego volver aCREATE
usar) un usuario válido en el sistema de destino debería ser el truco.UPDATE mysql.proc SET definer = 'my_new_user@localhost' WHERE db = 'mydatatbase';
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Recibí el mismo error después de actualizar mysql.
El error se ha solucionado después de este comando:
fuente
Si el usuario existe, entonces:
fuente
Crea el usuario eliminado así:
o
fuente
ERROR 1142 (42000): TRIGGER command denied to user 'web2vi'@'%' for table 'foo'
y debería agregar este comandogrant all on *.* to 'web2vi'@'%' identified by ''
después de crear el usuarioSigue estos pasos:
Espero eso ayude
fuente
La solución es solo una consulta de una sola línea como se muestra a continuación:
Reemplace
ROOT
con su nombre de usuario mysql. ReemplacePASSWORD
con su contraseña mysql.fuente
flush privileges
después de esto y funciona. Gracias.Se solucionó ejecutando los siguientes comentarios.
Si está obteniendo en
some_other
lugar deweb2vi
, debe cambiar el nombre en consecuencia.fuente
Para futuros googlers: recibí un mensaje similar al intentar actualizar una tabla en una base de datos que no contenía vistas. Después de investigar un poco, resultó que había importado disparadores en esa tabla, y esas fueron las cosas definidas por el usuario inexistente. Soltar los disparadores resolvió el problema.
fuente
El usuario 'web2vi' no existe en su servidor mysql.
Ver http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user
Si ese usuario existe, verifique desde qué servidores puede acceder, aunque hubiera pensado que sería un error diferente (por ejemplo, podría tener web2vi @ localhost, pero está accediendo a la base de datos como web2vi @% (En cualquier cosa)
fuente
Solución rápida para evitar y volcar el archivo:
fuente
--single-transaction
cambia la forma en que se implementan las tablas de bloqueo durante un volcado. O algo así. No recuerdo dónde lo leí, pero eso me ayudó a sentirme cómodo "simplemente arrojando la bandera". También estoy incómodo con las inexplicables "solo haz esto" "respuestas". De cualquier manera, funcionó para mi caso.ejemplo:
fuente
Esto me sucedió después de mover la base de datos de un servidor a otro. Inicialmente, el definidor estaba usando localhost y el usuario. En el nuevo servidor no tenemos ese usuario, y el host también había cambiado. Hice una copia de seguridad de esa tabla en particular y eliminé todos los desencadenantes manualmente de phpmyadmin . Después de eso, ha estado funcionando bien para mí.
fuente
Tuve el mismo problema con el usuario root y funcionó para mí cuando reemplacé
por
Entonces, si el usuario 'web2vi' puede conectarse desde 'localhost', puede intentar:
Estoy conectado de forma remota a la base de datos.
fuente
Mis 5 centavos
Tuve el mismo error mientras intentaba seleccionar desde una vista.
Sin embargo, el problema parece ser que esta vista, seleccionada desde otra vista que fue restaurada desde una copia de seguridad desde un servidor diferente.
y de hecho, SÍ, el usuario no era válido, pero no era obvio a dónde ir desde el primer vistazo.
fuente
Tuve el mismo problema hace unos minutos, me encontré con este problema después de eliminar un usuario no utilizado de la tabla mysql.user, pero al solucionar una vista alternativa, aquí hay un comando útil que lo hace muy simple:
Mezcle esto con la línea de comando mysql (suponiendo * nix, no familiarizado con windows):
Nota: el comando genera un SELECT CONCAT adicional en el archivo, haciendo que
mysql -uuser -ppass databasename < alterView.sql
falle si no lo elimina.Fuente: /dba/4129/modify-definer-on-many-views
fuente
Intenta establecer tu procedimiento como
SECURITY INVOKER
El valor predeterminado de Mysql establece la seguridad de los procedimientos como "DEFINER" (CREATOR OF) .. debe establecer la seguridad en el "invocador".
fuente
Su vista, "view_quotes" puede haber sido copiada de una base de datos diferente donde "web2vi" es un usuario válido en una base de datos donde "web2vi" no es un usuario válido.
Agregue el usuario "web2vi" a la base de datos o modifique la vista (normalmente eliminar la parte DEFINER = 'web2vi' @ '%' y ejecutar el script hará el truco)
fuente
En mi caso, la tabla tenía un activador con un usuario DEFINER que no existía.
fuente
De la referencia de MySQL de
CREATE VIEW
:Este usuario debe existir y siempre es mejor usar 'localhost' como nombre de host. Así que creo que si comprueba que el usuario existe y lo cambia a 'localhost' en la vista de creación, no tendrá este error.
fuente
El problema está claro: MySQL no puede encontrar el usuario especificado como el definidor.
Encontré este problema después de sincronizar el modelo de base de datos del servidor de desarrollo, aplicarlo a localhost, realizar cambios en el modelo y luego volver a aplicarlo a localhost. Aparentemente, había una vista (modifiqué) definida, por lo que no pude actualizar mi versión local.
Cómo arreglar (fácilmente) :
Nota: implica la eliminación, por lo que funciona bien para las vistas, pero asegúrese de tener una copia de seguridad de los datos si lo intenta en las tablas.
PD: Esta no es una solución adecuada ni la mejor solución. Acabo de publicarlo como una posible (y muy simple) solución.
fuente
Puedes probar esto:
fuente
Pasé una hora antes de encontrar una decisión para un problema como este. Pero, en mi caso, ejecuté esto:
Si realmente desea encontrar el problema, simplemente ejecute estos comandos uno por uno:
... y, después de cada uno de ellos, busque el campo 'definidor'.
En mi caso, era un gatillo viejo con barba, que alguien de los desarrolladores olvidó eliminar.
fuente
Vaya a la sección de edición de rutina y, en la parte inferior, cambie el Tipo de seguridad de Definidor a Invoker.
fuente
Una o varias de sus vistas fueron creadas / registradas por otro usuario. Deberá verificar el propietario de la vista y:
'web2vi'
usando ALTER VIEWTuve este problema una vez.
Intenté migrar vistas, de BD1 a BD2, usando SQLYog. SQLYog recreó las vistas en el otro DataBase (DB2), pero mantuvo al usuario de BD1 (donde eran diferentes). Más tarde me di cuenta de que las vistas que estaba usando en mi consulta tenían el mismo error que usted, incluso cuando no estaba creando ninguna vista.
Espero que esto ayude.
fuente
Si este es un procedimiento almacenado, puede hacer:
Pero esto no es aconsejable.
Para mí, la mejor solución es crear el definidor:
fuente
cuando mysql.proc está vacío, pero el sistema siempre nota "[email protected].%" para table_name no existe, simplemente rootea en la línea de comando mysql y escribe:
¡terminado!
fuente
Esto me sucedió después de que importé un volcado en Windows 10 con MYSQL Workbench 6.3 Community, con "root @% no existe". A pesar de que el usuario existió. Primero traté de comentar el DEFINER, sin embargo, esto no funcionó. Luego hice un reemplazo de cadena en "root @%" con "root @ localhost" y reimporté el volcado. Esto hizo el truco para mí.
fuente
Prueba esto Esta es una solución simple
más en https://stackoverflow.com/a/42183702/5407056
fuente
El usuario de la base de datos también parece ser sensible a mayúsculas y minúsculas, por lo que aunque tenía un usuario raíz '@'%, no tenía un usuario ROOT '@'%. ¡Cambié el usuario a mayúsculas a través de workbench y el problema se resolvió!
fuente