2010-03-07 24 views
14

La base de datos que estoy utilizando es MySQL 5.1. Especifiqué, creo, la conexión de la derecha en mi web.config. pero cuando ejecuto mi aplicación web se lanza esta excepción: -¿Qué es exactamente este error?

MySql.Data.MySqlClient.MySqlException: El usuario especificado como un definidor ('root' @ '%') no existe

Cualquier ayuda. ¿Por qué estoy recibiendo esto?

Respuesta

28

El código fuente para los procedimientos almacenados que has estado cargando probablemente contiene "DEFINER = root @ '%'" como parte de la definición - buscando un poco como esto:

create definer='root'@'%' procedure sp_test() begin end; 

El problema aquí es que no tienes una cuenta en tu sistema para 'root' @ '%'. Esto se puede demostrar fácilmente. Desde la línea de comandos de MySQL:

show grants for 'root'@'%'; 

espero que esto va a volver con un mensaje de error:

ERROR 1141 (42000): There is no such grant defined for user 'root' on host '%' 

La solución es alterar la fuente de sus procedimientos almacenados, o para crear la cuenta de que faltan :

grant all on *.* to 'root'@'%' identified by 'password' with grant option; 

no es generalmente una buena idea tener una cuenta de este tipo de alta potencia accesible desde cualquier lugar, pero eso es otra historia.

+0

+1 ¡agradable! Tenía una idea de que tenía que ver con la especificación del host en el nombre de usuario. Veremos si eso lo ordena. –

2

¿Esto está en un procedimiento almacenado? Entonces tal vez this blog post ayuda (el énfasis es mío).

Todas las configuraciones estaban bien y me preguntaba qué causaba el problema. A primera prisa, pensé que podría ser un caché, ya que había solicitado recientemente tener xcache en nuestro servidor.

Pero no fue el caso. El error fue mucho más estúpido de lo que uno puede imaginar. Ese script específico usa un procedimiento almacenado para insertar/traer datos a/desde MySQL. El usuario que creó el sp fue el que fue eliminado. Y ese era el problema. El término "Definer" en términos de MySQL es el que crea el procedimiento almacenado y para que el procedimiento almacenado se ejecute debe existir ese usuario.

+0

Gracias. Intenté la solución que figura en el enlace. Eliminé toda la base de datos, recreada como usuario conectado (root). pero sigue recibiendo el mismo error – Jango

+0

+1 - Creo que Pekka tiene razón. He agregado otra respuesta que intenta explicar las cosas con más detalle. – Martin

3

Sé que esta respuesta llega muy tarde, pero encontré una solución que no implica el cambio de ningún derecho en absoluto.

Vaya a sus Procedimientos almacenados y elimine la cláusula DEFINER. El servidor debe escribir en un nuevo DEFINER que coincida con la información del usuario con la que está conectado.

Funcionó para mí ...