Я запускаю Protractor и столкнулся с той же проблемой.
Решение в моем случае было довольно простым.
$ npm update protractor -g
$ webdriver-manager update
Попробуйте установить вашу процедуру как SECURITY INVOKER
. По умолчанию Mysql устанавливает безопасность процедур как «ОПРЕДЕЛЕНИЕ» (СОЗДАНИЕ) .. вы должны установить защиту для «invoker».
Я получил ту же ошибку после обновления mysql.
Ошибка была исправлена после этой команды:
mysql_upgrade -u root
mysql_upgrade должен выполняться каждый раз при обновлении MySQL , Он проверяет все таблицы во всех базах данных на предмет несовместимости с текущей версией MySQL Server. Если найденная таблица имеет возможную несовместимость, она проверяется. Если обнаружены какие-либо проблемы, таблица будет восстановлена. mysql_upgrade также обновляет системные таблицы, чтобы вы могли использовать новые привилегии или возможности, которые могли быть добавлены.
blockquote>
Один или несколько ваших просмотров, созданных / зарегистрированных другим пользователем. Вам нужно будет проверить владельца представления и:
'web2vi'
, используя ALTER VIEW У меня была эта проблема один раз.
Я пытался перенести представления из BD1 в BD2, используя SQLYog. SQLYog воссоздал представления в другой базе данных (DB2), но он сохранил пользователя BD1 (они разные). Позже я понял, что взгляды, которые я использовал в своем запросе, имели ту же ошибку, что и вы, даже когда я не создавал никакого представления.
Надеюсь, что эта помощь.
Если пользователь существует, то:
mysql> flush privileges;
У меня была та же проблема с пользователем root, и он работал для меня, когда я заменил
root@%
на
root@localhost
Итак, если пользователь «web2vi» разрешен для подключения из «localhost», вы можете попробовать:
web2vi@localhost
Я подключен удаленно к базе данных.
Это обычно происходит при экспорте представлений / триггеров / процедур из одной базы данных или сервера в другой, поскольку пользователь, создавший этот объект, больше не существует.
У вас есть два варианта:
Это, возможно, проще всего сделать при первоначальном импорте объектов базы данных, удалив любые DEFINER
заявления из дампа.
Изменение определителя позже является более сложным :
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ",
table_name, " AS ", view_definition, ";")
FROM information_schema.views
WHERE table_schema='your-database-name';
Пример:
UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'
Будьте осторожны, потому что это изменит все определители для всех баз данных.
Если вы обнаружили следующую ошибку при использовании базы данных MySQL:
The user specified as a definer ('someuser'@'%') does not exist`
Затем вы можете решить ее, используя следующее:
blockquote>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
или они могут делать меньше.
Для будущих гуглеров: у меня есть аналогичное сообщение, пытающееся обновить таблицу в базе данных, которая не содержит представлений. После некоторого копания оказалось, что я импортировал триггеры на эту таблицу, и это были вещи, определенные несуществующим пользователем. Сбрасывание триггеров решило проблему.
У меня была одна и та же проблема минут назад, я столкнулся с этой проблемой после удаления неиспользуемого пользователя из таблицы 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
Пользователь «web2vi» не существует на вашем сервере mysql.
См. http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user
Если этот пользователь существует, проверьте, на каких серверах он может получить доступ, хотя я бы подумал, что это будет другая ошибка (например, у вас может быть web2vi @ localhost, но вы получаете доступ к db как web2vi @% (во что угодно)
Это произошло со мной после того, как я импортировал дамп в Windows 10 с MYSQL Workbench 6.3 Community, при этом «root @% не существует». Хотя пользователь существовал. Сначала я попытался прокомментировать DEFINER, но это не сработало. Затем я заменил строку «root @%» на «root @ localhost» и повторно импортировал дамп. Это сделал трюк для меня.
Я пришел сюда по той же проблеме, я не смог найти нигде в моем коде, где какой-то пользователь делал это действие. по-видимому, это был из триггера, который использовал пользователя, который был давно удален (db был восстановлен из более старой версии), поэтому, если вы озадачены, как я, взгляните на ваши события / триггеры / подпрограммы. надеюсь, это поможет кому-то.
быстро исправить работу и выгрузить файл:
mysqldump --single-transaction -u root -p xyz_live_db > xyz_live_db_bkup110116.sql
Если это хранимая процедура, вы можете сделать:
UPDATE `mysql`.`proc` SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'
Но это не рекомендуется.
Для меня лучшим решением является создание определителя:
create user 'myuser' identified by 'mypass';
grant all on `mytable`.* to 'myuser' identified by 'mypass';
Выполните следующие шаги:
Надеюсь, это поможет
Решение - это всего лишь однострочный запрос, как показано ниже:
grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;
Замените ROOT
своим именем пользователя mysql. Замените PASSWORD
своим паролем mysql.
В моем случае таблица имела триггер с пользователем DEFINER, которого не было.
Из Ссылка на MySQL в CREATE VIEW
:
В предложениях DEFINER и SQL SECURITY указан контекст безопасности, который будет использоваться при проверке прав доступа во время вызова представления.
blockquote>Этот пользователь должен существовать и всегда лучше использовать «localhost» в качестве имени хоста. Поэтому я считаю, что если вы проверите, что пользователь существует и измените его на «localhost» при создании представления, у вас не будет этой ошибки.
Вы можете попробовать следующее:
$ mysql -u root -p
> grant all privileges on *.* to `root`@`%` identified by 'password';
> flush privileges;
Создайте удаленный пользователь следующим образом:
mysql> create user 'web2vi';
или
mysql> create user 'web2vi'@'%';
Почему я получаю эту ошибку? Как это исправить?
blockquote>Я потратил час до того, как нашел решение для такой проблемы. Но в моем случае я запустил это:
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';
... и, после каждого из них, ищите поле «определитель».
В моем случае это был бородатый старый триггер, который кто-то из разработчиков забыл удалить.
grant all on *.* to 'username'@'%' identified by 'password' with grant option;
пример:
grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;
Пользователь базы данных также, похоже, чувствителен к регистру, поэтому, когда у меня был пользователь root @ @%, у меня не было пользователя ROOT '@'%. Я изменил пользователя на верхний регистр с помощью инструментария, и проблема была решена!
в моем случае у меня был триггер в этой таблице, что я не мог обновлять данные, получая ту же ошибку.
Ошибка MySQL 1449: пользователь, указанный как определитель, не существует
blockquote>решение заключалось в том, чтобы удалить триггеры в этой таблице и снова создать их снова, это устранило проблему, поскольку триггер был сделан с другим пользователем с другого сервера, а имя пользователя было изменено на новом сервере после смены хостинговой компании. это мои 2 цента
Мои 5 центов.
У меня была такая же ошибка, когда я пытался выбрать из представления.
Однако проблема заключается в том, что это представление, выбранное из другого восстановленного вида из резервной копии с другого сервера.
и на самом деле, ДА, пользователь был недействителен, но не был очевиден, где с первого взгляда.
Проблема ясна: MySQL не может найти пользователя, указанного в качестве определителя.
Я столкнулся с этой проблемой после синхронизации модели базы данных с сервера разработки, применения ее к localhost, внесения изменений в модель и последующего ее повторного применения к локальному хосту. По-видимому, было определено представление (я изменил), поэтому я не смог обновить локальную версию.
Как исправить (легко):
Примечание: он включает удаление поэтому он отлично подходит для просмотра, но убедитесь, что у вас есть резервная копия данных, если вы попробуете это на таблицах.
P.S. Это не является ни правильным, ни лучшим решением. Я просто разместил его как возможное (и очень простое) решение.
Исправлено, выполнив следующие комментарии.
grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;
, если вы получаете some_other
вместо web2vi
, тогда вы должны соответствующим образом изменить имя.
Пользователь, который первоначально создал представление или процедуру SQL, был удален. Если вы воссоздаете этого пользователя, он должен устранить вашу ошибку.
Ваше мнение, «view_quotes», возможно, было скопировано из другой базы данных, где «web2vi» является допустимым пользователем в базе данных, где «web2vi» не является допустимым пользователем. Либо добавьте пользователя «web2vi» в базу данных, либо измените представление (обычно удаление части DEFINER = 'web2vi' @ '%' и выполнение скрипта сделает трюк)
Перейдите в раздел подпрограммы редактирования, а внизу измените тип безопасности с Definer на Invoker.
, когда mysql.proc пуст, но система всегда замечает «user@192.168.%» для имени таблицы нет, вы просто root в командной строке mysql и введите:
CHECK TABLE `database`.`table_name` QUICK FAST MEDIUM CHANGED;
flush privileges;
over!