Вопрос по mysql – Ошибка MySQL 1449: пользователь, указанный как определитель, не существует

278

Когда я запускаю следующий запрос, я получаю сообщение об ошибке:

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

Сообщение об ошибке:

#1449 - The user specified as a definer ('web2vi'@'%') does not exist

Почему я получаю эту ошибку? Как мне это исправить?

Подумав об этом мгновение, самым простым способом было добавить отсутствующую учетную запись в базу данных, и ошибка исчезла. Никаких сложных процедур не требуется. Если вы можете добавить учетную запись, попробуйте сначала. user1794918
Ошибка должна быть в том месте, гдеview_quotes Посмотреть. Shell
Покажите нам ваш SHOW CREATE VIEW & quot; view_quotes & apos; jordeu

Ваш Ответ

30   ответов
19

Go to PHPMyAdmin Select Your Database Select your table On the top menu Click on 'Triggers' Click on 'Edit' to edit trigger Change definer from [[email protected]] to [email protected]

Надеюсь, поможет

Это реальное решение вопроса, а не создание пользователя и предоставление разрешения. просто измени определитель.
Ваш комментарий спас мне всю жизнь!
33

Если пользователь существует, то:

mysql> flush privileges;
что-то настолько простое, что я очень скучаю лол
Эта маленькая чертова вещь отсутствует.
3

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

пример:

grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
13

Для будущих гуглеров: я получил похожее сообщение, пытаясь обновить таблицу в базе данных, которая не содержала просмотров. После некоторых копаний оказалось, что я импортировал триггеры в эту таблицу, и это были вещи, определенные несуществующим пользователем. Сброс триггеров решил проблему.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
2

Ваш вид & quot; view_quotes & quot; возможно, был скопирован из другой базы данных, где «web2vi» является действительным пользователем в базе данных, где "web2vi" не является действительным пользователем
Either add the "web2vi" user to the database or alter the view (normally removing the DEFINER='web2vi'@'%' part and executing the script will do the trick)

5

У меня была та же проблема с пользователем root, и она работала для меня, когда я заменил

[email protected]%

от

[email protected]

Так что, если пользователь «web2vi» разрешено подключение с «localhost», вы можете попробовать:

[email protected]

Я удаленно подключен к базе данных.

Error: User Rate Limit Exceeded
1

Если это хранимая процедура, вы можете сделать:

UPDATE `mysql`.`proc` SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'

Но это не рекомендуется.

Для меня лучшим решением будет создать определитель:

create user 'myuser' identified by 'mypass';
grant all on `mytable`.* to 'myuser' identified by 'mypass';
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
4

Это случилось со мной после перемещения БД с одного сервера на другой. Первоначально определитель использовал localhost и пользователя. На новом сервере у нас нет того пользователя и хоста, которые также были изменены. Я взял резервную копию этого конкретного стола иremove all the triggers manually from phpmyadmin, После этого он работает нормально для меня.

Error: User Rate Limit Exceeded
1

Why am I getting that error? How do I fix it?

Я потратил час, прежде чем нашел решение такой проблемы. Но в моем случае я запустил это:

mysql> UPDATE `users` SET `somefield` = 1 WHERE `user_id` = 2;
ERROR 1449 (HY000): The user specified as a definer ('root'@'%') does not exist

Если вы действительно хотите найти проблему, просто запустите эти команды одну за другой:

SHOW PROCEDURE STATUS;
SHOW FUNCTION STATUS;
SHOW TRIGGERS;
SHOW FULL TABLES IN database_name WHERE TABLE_TYPE LIKE 'VIEW';

... и после каждого из них ищите поле 'определитель'.

В моем случае это был старый бородатый триггер, который кто-то из разработчиков забыл удалить.

1

Один или несколько ваших просмотров были созданы / зарегистрированы другим пользователем. Вам необходимо проверить владельца представления и:

  1. Recreate the user; as the other answers say. or
  2. Recreate the views that where created by the user 'web2vi' using ALTER VIEW

У меня была эта проблема однажды.

Я пытался перенести представления с BD1 на BD2, используя SQLYog. SQLYog воссоздал представления в другой базе данных (DB2), но сохранил пользователя BD1 (они были разными). Позже я понял, что представления, которые я использовал в своем запросе, имели ту же ошибку, что и вы, даже когда я не создавал никакого представления.

Надеюсь, это поможет.

1

когда mysql.proc пуст, но система всегда замечает & quot; [email protected]% & quot; для table_name не существует, вы просто root в командной строке mysql и введите:

CHECK TABLE `database`.`table_name` QUICK FAST MEDIUM CHANGED;
flush privileges;

над!

7

Пользователь "web2vi" не существует на вашем сервере MySQL.

Увидетьhttp://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user

Если этот пользователь существует, проверьте, с каких серверов он может получить доступ, хотя я бы подумал, что это будет другой ошибкой (например, у вас может быть web2vi @ localhost, но вы обращаетесь к БД как web2vi @% (при любом)

Error: User Rate Limit Exceeded
1

ОтMySQL ссылка изCREATE VIEW:

The DEFINER and SQL SECURITY clauses specify the security context to be used when checking access privileges at view invocation time.

Этот пользователь должен существовать, и всегда лучше использовать «localhost» как имя хоста. Поэтому я думаю, что если вы проверите, что пользователь существует, и измените его на «localhost». при создании представления у вас не будет этой ошибки.

4

Мои 5 центов.

У меня была та же ошибка, когда я пытался выбрать из вида.

Однако проблема заключается в том, что это представление выбрано из другого представления, которое было восстановлено из резервной копии с другого сервера.

и фактически, ДА, пользователь был недействителен, но не было очевидно, куда с первого взгляда.

6

быстрое решение, чтобы обойти и сбросить файл:

mysqldump --single-transaction -u root -p xyz_live_db > xyz_live_db_bkup110116.sql
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

У меня была та же самая проблема несколько минут назад, я столкнулся с этой проблемой после удаления неиспользуемого пользователя из таблицы mysql.user, но, выполнив представление alter, исправил ее, вот удобная команда, которая делает ее очень простой:

SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ",
table_name," AS ", view_definition,";") FROM 
information_schema.views WHERE table_schema='databasename'

Смешайте это с командной строкой mysql (при условии * nix, не знакомый с windows):

> echo above_query | mysql -uuser -p > alterView.sql
> mysql -uuser -ppass databasename < alterView.sql

Примечание: команда генерирует и дополнительный SELECT CONCAT для файла, делаяmysql -uuser -ppass databasename < alterView.sql не удастся, если вы его не удалите.

Источник:https://dba.stackexchange.com/questions/4129/modify-definer-on-many-views

2

Вы можете попробовать это:

$ mysql -u root -p 
> grant all privileges on *.* to `root`@`%` identified by 'password'; 
> flush privileges;
414

Это обычно происходит при экспорте представлений / триггеров / процедур из одной базы данных или сервера на другой, поскольку пользователь, создавший этот объект, больше не существует.

У вас есть два варианта:

1. Change the DEFINER

Возможно, это проще всего сделать при первоначальном импорте объектов базы данных, удалив любыеDEFINER выписки из свалки.

Изменить определитель позже немного сложнее:

How to change the definer for views

  1. Run this SQL to generate the necessary ALTER statements

    SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
    table_name, " AS ", view_definition, ";") 
    FROM information_schema.views 
    WHERE table_schema='your-database-name';
    
  2. Copy and run the ALTER statements

How to change the definer for stored procedures

Пример:

UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'

Будьте осторожны, потому что это изменит все определители для всех баз данных.

2. Create the missing user

If you've found following error while using MySQL database:

The user specified as a definer ('someuser'@'%') does not exist`

Then you can solve it by using following :

GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password';
FLUSH PRIVILEGES;

From http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html

Это работает как шарм - вам нужно только изменитьsomeuser на имя пропавшего пользователя. На локальном сервере разработчика вы можете просто использоватьroot.

Также подумайте, действительно ли вам нужно предоставить пользователюALL разрешения или могут ли они сделать с меньшими затратами.

.Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceededmysql.procError: User Rate Limit Exceeded
Error: User Rate Limit ExceededDEFINER=`user`@`host`Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
0

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

MySQL error 1449: The user specified as a definer does not exist

решение состояло в том, чтобы удалить триггеры в этой таблице и воссоздать их снова, это решило проблему, поскольку триггер был выполнен с другим пользователем с другого сервера, а имя пользователя изменилось на новом сервере после смены хостинговой компании. это мои 2 цента

33

Я получил ту же ошибку после обновления MySQL.

Ошибка была исправлена после этой команды:

mysql_upgrade -u root

mysql_upgrade should be executed each time you upgrade MySQL. It checks all tables in all databases for incompatibilities with the current version of MySQL Server. If a table is found to have a possible incompatibility, it is checked. If any problems are found, the table is repaired. mysql_upgrade also upgrades the system tables so that you can take advantage of new privileges or capabilities that might have been added.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Проблема ясна - MySQL не может найти пользователя, указанного как определитель.

Я столкнулся с этой проблемой после синхронизации модели базы данных с сервера разработки, применения ее к localhost, внесения изменений в модель и последующего применения ее к localhost. Видимо, было определено представление (которое я изменил), и поэтому я не смог обновить свою локальную версию.

How to fix (без труда):

Note: it involves deleting so it works just fine for views but make sure you have data backed-up if you try this on tables.

  1. Login to database as root (or whatever has enough power to make changes).
  2. Delete view, table or whatever you are having trouble with.
  3. Synchronize your new model - it will not complain about something that does not exist now. You may want to remove SQL SECURITY DEFINER part from the item definition you had problems with.

Постскриптум Это не является ни правильным, ни лучшим универсальным решением. Я только что опубликовал это как возможное (и очень простое) решение.

Error: User Rate Limit Exceeded
4

Попробуйте установить вашу процедуру как SECURITY INVOKER

Mysql по умолчанию устанавливает безопасность процедур как "DEFINER" (СОЗДАТЕЛЬ). Вы должны установить защиту на «invoker».

10

Исправлено путем запуска следующих комментариев.

grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;

если вы получаетеsome_other вместоweb2vi тогда вы должны изменить имя соответственно.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
3

В моем случае в таблице был триггер с пользователем DEFINER, которого не было.

Error: User Rate Limit Exceeded
130

Пользователь, который первоначально создал представление или процедуру SQL, был удален. Если вы воссоздаете этого пользователя, он должен устранить вашу ошибку.

Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededSELECTError: User Rate Limit ExceededEXECUTEError: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededUPDATE mysql.proc SET definer = '[email protected]' WHERE db = 'mydatatbase';
Error: User Rate Limit ExceededDROPError: User Rate Limit ExceededCREATEError: User Rate Limit Exceeded
29

mysql> create user 'web2vi';

или же

mysql> create user 'web2vi'@'%';
Error: User Rate Limit Exceeded
Error: User Rate Limit ExceededERROR 1142 (42000): TRIGGER command denied to user 'web2vi'@'%' for table 'foo'Error: User Rate Limit Exceededgrant all on *.* to 'web2vi'@'%' identified by ''Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Это произошло со мной после того, как я импортировал дамп в Windows 10 с сообществом MYSQL Workbench 6.3 с «root @% не существует». Хотя пользователь существовал. Сначала я попытался закомментировать DEFINER, однако, это не сработало. Затем я сделал замену строки на"[email protected]%" с"[email protected]" и повторно импортировал свалку. Это помогло мне.

0

Пользователь базы данных, похоже, также чувствителен к регистру, поэтому, хотя у меня был root-пользователь "@", у меня не было пользователя ROOT "@". Я изменил пользователя на верхний регистр через верстак, и проблема была решена!

16

Решение - это просто однострочный запрос, как показано ниже:

grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;

замещатьROOT с вашим именем пользователя MySQL. замещатьPASSWORD с вашим паролем mysql.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded
1

Перейдите в раздел процедуры редактирования и, внизу, измените Тип безопасности с Определителя на Invoker.

Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded

Похожие вопросы