Что именно это за ошибка?

Я использую базу данных MySQL 5.1. Я указал, я думаю, правильную строку подключения в моем web.config. но когда я запускаю свое веб-приложение. он выдает это исключение: -

MySql.Data.MySqlClient.MySqlException: пользователь, указанный как определитель ("root"@'%'), не существует

Любая помощь. Почему я получаю это?


person Jango    schedule 07.03.2010    source источник


Ответы (3)


Исходный код для хранимых процедур, которые вы загружали, вероятно, содержит "DEFINER=root@'%'" как часть определения, что выглядит примерно так:

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

Проблема здесь в том, что у вас нет учетной записи в вашей системе для 'root'@'%'. Это можно легко продемонстрировать. Из командной строки MySQL:

show grants for 'root'@'%';

Я ожидаю, что это вернется с сообщением об ошибке:

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

Исправление состоит в том, чтобы изменить источник ваших хранимых процедур или создать отсутствующую учетную запись:

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

Как правило, иметь такую ​​​​мощную учетную запись, доступную из любого места, не очень хорошая идея, но это уже другая история.

person Martin    schedule 08.03.2010
comment
+1 хорошо! У меня было подозрение, что это связано со спецификацией хоста в имени пользователя. Посмотрим, поможет ли это. - person Pekka; 08.03.2010

Я знаю, что этот ответ приходит очень поздно, но я нашел решение, которое вообще не требует изменения каких-либо прав.

Зайдите в свои хранимые процедуры и удалите пункт DEFINER. Сервер должен записать новый DEFINER, который соответствует информации о пользователе, с которым вы вошли в систему.

Работал на меня...

person Ortund    schedule 27.06.2012

Это в хранимой процедуре? Тогда, возможно, поможет эта запись в блоге (выделено мной).

Все настройки были в порядке, и мне было интересно, в чем причина проблемы. Сначала я подумал, что это может быть кеш, так как недавно я запросил наличие xcache на нашем сервере.

Но это было не так. Ошибка была гораздо глупее, чем можно себе представить. Этот конкретный скрипт использует хранимую процедуру для вставки/выборки данных в/из MySQL. Пользователь, создавший sp, был удален. И в этом была проблема. Термин «Определитель» в терминах MySQL — это тот, кто создает хранимую процедуру, и для выполнения хранимой процедуры должен существовать пользователь.

person Pekka    schedule 07.03.2010
comment
Спасибо. Я попробовал решение, указанное в ссылке. Я удалил всю базу данных, воссоздал ее как авторизованный пользователь (root). но все еще получаю ту же ошибку - person Jango; 08.03.2010
comment
+1 - Я думаю, что Пекка прав. Я добавил еще один ответ, который пытается объяснить ситуацию более подробно. - person Martin; 08.03.2010