2010-03-07 4 views
14

Il database che sto utilizzando è MySQL 5.1. Ho specificato, credo, giusto connectiontring nel mio web.config. ma quando eseguo la mia app web. si genera questa eccezione: -Che cos'è esattamente questo errore?

MySql.Data.MySqlClient.MySqlException: L'utente specificato come definitore ('root' @ '%') non esiste

Qualsiasi aiuto. Perché sto ricevendo questo?

risposta

28

Il codice sorgente per le stored procedure che sono state carico probabilmente contiene "DEFINER = root @ '%'" come parte della definizione - guardando un po 'come questo:

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

Il problema ecco che non hai un account sul tuo sistema per 'root' @ '%'. Questo può essere facilmente dimostrato. Dalla riga di comando di MySQL:

show grants for 'root'@'%'; 

Mi aspetto che questo tornerà con un messaggio di errore:

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

La correzione è di alterare la fonte di stored procedure, o per creare l'account mancante :

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

non è generalmente una buona idea avere un account molto alta potenza accessibile da qualsiasi luogo, ma questa è un'altra storia.

+0

+1 bello! Avevo il sospetto che avesse a che fare con le specifiche dell'host nel nome utente. Vedremo se lo farà. –

2

Si tratta di una procedura memorizzata? Allora forse gli aiuti this blog post (sottolineano il mio).

Tutte le impostazioni sono andate bene e mi chiedevo che cosa sta causando il problema. All'inizio ho pensato che potesse essere una cache, come avevo chiesto di recente di avere xcache sul nostro server.

Ma non era il caso. L'errore era molto più stupido di quanto si possa immaginare. Questo specifico script utilizza una stored procedure per inserire/recuperare i dati da/verso MySQL. L'utente che ha creato la sp è stato quello che è stato cancellato. E quello era il problema. Il termine "Definitore" in termini di MySQL è colui che crea la stored procedure e che la stored procedure deve essere eseguita dall'utente.

+0

Grazie. Ho provato la soluzione indicata nel link. Ho abbandonato l'intero database, ricreato come utente loggato (root). ma continua a ricevere lo stesso errore – Jango

+0

+1 - Penso che Pekka abbia ragione. Ho aggiunto un'altra risposta che tenta di spiegare le cose in modo più dettagliato. – Martin

3

So che questa risposta arriva molto tardi, ma ho trovato una soluzione che non comporta affatto la modifica di alcun diritto.

Entrare nelle stored procedure e eliminare la clausola DEFINER. Il server dovrebbe scrivere in un nuovo DEFINER che corrisponda alle informazioni dell'utente con cui hai effettuato l'accesso.

Ha funzionato per me ...