MYSQL [HY000] Ошибка: определитель ('admin' @ '%') не существует [дубликат]

Я запускаю Protractor и столкнулся с той же проблемой.

Решение в моем случае было довольно простым.

$ npm update protractor -g

$ webdriver-manager update

239
задан dronus 28 June 2015 в 08:22
поделиться

30 ответов

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

. По умолчанию Mysql устанавливает безопасность процедур как «ОПРЕДЕЛЕНИЕ» (СОЗДАНИЕ) .. вы должны установить защиту для «invoker».

4
ответ дан Allan Felipe Murara 5 September 2018 в 08:38
поделиться

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

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

mysql_upgrade -u root

mysql_upgrade должен выполняться каждый раз при обновлении MySQL , Он проверяет все таблицы во всех базах данных на предмет несовместимости с текущей версией MySQL Server. Если найденная таблица имеет возможную несовместимость, она проверяется. Если обнаружены какие-либо проблемы, таблица будет восстановлена. mysql_upgrade также обновляет системные таблицы, чтобы вы могли использовать новые привилегии или возможности, которые могли быть добавлены.

9
ответ дан artamonovdev 5 September 2018 в 08:38
поделиться

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

  1. Восстановить пользователя; как говорят другие ответы. или
  2. Восстановить представления, созданные пользователем 'web2vi', используя ALTER VIEW

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

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

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

1
ответ дан Benjamin 5 September 2018 в 08:38
поделиться

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

mysql> flush privileges;
31
ответ дан BroknDodge 5 September 2018 в 08:38
поделиться

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

root@%

на

root@localhost

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

web2vi@localhost

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

4
ответ дан c-toesca 5 September 2018 в 08:38
поделиться

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

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

1. Измените DEFINER

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

Изменение определителя позже является более сложным :

Как изменить определитель для представлений

  1. Запустить этот SQL для генерации необходимых операторов ALTER
    SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ", 
    table_name, " AS ", view_definition, ";") 
    FROM information_schema.views 
    WHERE table_schema='your-database-name';
    
  2. Копировать и запускать инструкции ALTER

Как изменить определитель для хранимых процедур

Пример:

UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'

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

2. Создайте отсутствующий пользователь

Если вы обнаружили следующую ошибку при использовании базы данных MySQL:

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

Затем вы можете решить ее, используя следующее:

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

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

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

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

356
ответ дан Chococroc 5 September 2018 в 08:38
поделиться

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

13
ответ дан Chris Poirier 5 September 2018 в 08:38
поделиться

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

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

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

> 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

1
ответ дан Community 5 September 2018 в 08:38
поделиться

Пользователь «web2vi» не существует на вашем сервере mysql.

См. http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user

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

6
ответ дан cosmorogers 5 September 2018 в 08:38
поделиться

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

1
ответ дан Dévan Coetzee 5 September 2018 в 08:38
поделиться

Я пришел сюда по той же проблеме, я не смог найти нигде в моем коде, где какой-то пользователь делал это действие. по-видимому, это был из триггера, который использовал пользователя, который был давно удален (db был восстановлен из более старой версии), поэтому, если вы озадачены, как я, взгляните на ваши события / триггеры / подпрограммы. надеюсь, это поможет кому-то.

0
ответ дан Dan Levin 5 September 2018 в 08:38
поделиться

быстро исправить работу и выгрузить файл:

mysqldump --single-transaction -u root -p xyz_live_db > xyz_live_db_bkup110116.sql
6
ответ дан Developer 5 September 2018 в 08:38
поделиться

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

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

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

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

create user 'myuser' identified by 'mypass';
grant all on `mytable`.* to 'myuser' identified by 'mypass';
1
ответ дан helpse 5 September 2018 в 08:38
поделиться

Выполните следующие шаги:

  1. Перейдите в PHPMyAdmin
  2. Выберите свою базу данных
  3. Выберите свою таблицу
  4. Вверху menu Нажмите «Triggers»
  5. Нажмите «Изменить», чтобы отредактировать триггер
  6. Измените определитель с [user @ localhost] на root @ localhost

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

13
ответ дан hussainfrotan 5 September 2018 в 08:38
поделиться

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

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

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

14
ответ дан J. Steen 5 September 2018 в 08:38
поделиться

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

3
ответ дан jbaylina 5 September 2018 в 08:38
поделиться

Из Ссылка на MySQL в CREATE VIEW:

В предложениях DEFINER и SQL SECURITY указан контекст безопасности, который будет использоваться при проверке прав доступа во время вызова представления.

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

1
ответ дан jordeu 5 September 2018 в 08:38
поделиться

Вы можете попробовать следующее:

$ mysql -u root -p 
> grant all privileges on *.* to `root`@`%` identified by 'password'; 
> flush privileges;
2
ответ дан kenorb 5 September 2018 в 08:38
поделиться

Создайте удаленный пользователь следующим образом:

mysql> create user 'web2vi';

или

mysql> create user 'web2vi'@'%';
25
ответ дан Kevin 5 September 2018 в 08:38
поделиться

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

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

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
ответ дан kivagant 5 September 2018 в 08:38
поделиться
grant all on *.* to 'username'@'%' identified by 'password' with grant option;

пример:

grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;
3
ответ дан mesutpiskin 5 September 2018 в 08:38
поделиться

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

0
ответ дан Metalmania 5 September 2018 в 08:38
поделиться

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

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

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

0
ответ дан Nassim 5 September 2018 в 08:38
поделиться

Мои 5 центов.

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

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

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

4
ответ дан Nick 5 September 2018 в 08:38
поделиться

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

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

Как исправить (легко):

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

  1. Войдите в базу данных как root (или что-то еще имеет достаточную мощность для создания изменения).
  2. Удалить представление, таблицу или все, с чем вы столкнулись.
  3. Синхронизируйте свою новую модель - она ​​не будет жаловаться на то, чего не существует сейчас. Вы можете удалить часть SQL SECURITY DEFINER из определения элемента, с которым у вас были проблемы.

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

1
ответ дан Pijusn 5 September 2018 в 08:38
поделиться

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

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

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

8
ответ дан Selvamani 5 September 2018 в 08:38
поделиться

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

125
ответ дан Simon East 5 September 2018 в 08:38
поделиться

Ваше мнение, «view_quotes», возможно, было скопировано из другой базы данных, где «web2vi» является допустимым пользователем в базе данных, где «web2vi» не является допустимым пользователем. Либо добавьте пользователя «web2vi» в базу данных, либо измените представление (обычно удаление части DEFINER = 'web2vi' @ '%' и выполнение скрипта сделает трюк)

2
ответ дан user1016736 5 September 2018 в 08:38
поделиться

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

1
ответ дан user1174436 5 September 2018 в 08:38
поделиться

, когда mysql.proc пуст, но система всегда замечает «user@192.168.%» для имени таблицы нет, вы просто root в командной строке mysql и введите:

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

over!

1
ответ дан zhi.yang 5 September 2018 в 08:38
поделиться
Другие вопросы по тегам:

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