Когда я запустите следующий запрос, я получаю сообщение об ошибке:
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
Почему я получаю эту ошибку? Как я могу исправить это?
Это обычно происходит при экспорте представлений/триггеры/процедуры из одной базы данных или сервера на другой, как пользователь, создавший этот объект больше не существует.
У вас есть два варианта:
Это возможно, проще всего это сделать, когда изначально импортировать объекты базы данных, удалив заявления любого определитель
со свалки.
Изменение определитель позже более сложным:
Выберите конкатенацию("у вашего альтер определитель=`@
хост` посмотреть " и,
имя_таблицы, то " как ", view_definition, и"; и")
Из регулярных выражений.вид
Где table_schema='ваш-база данных-имя';
Пример:
UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'
Будьте осторожны, потому что это изменит все definers для всех баз данных.
если вы'вэ нашел следующее сообщение об ошибке при использовании базы данных MySQL:
пользователь, указанный в качестве определитель ('someuser на'@'%') не существует`
затем вы можете решить > это с помощью следующих действий :
ГРАНТ ВСЕ ПО . В 'someuser на'@'%' определены 'комплекс-пароль'; ЗАПОДЛИЦО ЛЬГОТ;
От http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Это работает как шарм - вы только должны изменить someuser на на имя пользователя. На локальном сервере разработчика, вы можете обычно просто использовать
root`.
Также подумайте, нужны ли вам на самом деле нужно предоставлять разрешения на доступ пользователя " все " или насколько они могли бы сделать с меньшими затратами.
Пользователь, который создал представление SQL или процедуры был удален. Если вы создаете пользователя, он должен рассмотреть свои ошибки.
Я получил ту же ошибку после обновления в MySQL.
Ошибка была исправлена после этой команды:
mysql_upgrade -u root
mysql_upgrade должна быть выполнена каждый раз, когда вы модернизируете MySQL. Это проверки всех таблиц во всех базах данных за несовместимости с В текущей версии сервера MySQL. Если в таблице есть возможная несовместимость, это проверено. Если нашли какие-либо проблемы, таблица ремонте. mysql_upgrade также обновления системных таблиц так что вы можете воспользоваться новыми привилегиями и возможностями, которые возможно, были добавлены.
Если пользователь существует, то:
mysql> flush privileges;
Выполните следующие действия:
Надеюсь, что это помогает
Решение является просто одним запросом линии, как показано ниже :
grant all on *.* to 'ROOT'@'%' identified by 'PASSWORD' with grant option;
Заменить корень
с вашим именем пользователя MySQL.
Заменить пароль пароль для MySQL.
Для будущих гуглеры: я получил аналогичное сообщение пытаюсь обновить таблицу в базе данных, которая не содержит никаких мнений. После некоторого копания, оказалось, что я импортировал триггеры на эту таблицу, и эти вещи определяются несуществующих пользователей. Сбрасывая триггеры решена проблема.
Исправить, запустив в следующем комментарии.
grant all on *.* to 'web2vi'@'%' identified by 'root' with grant option;
FLUSH PRIVILEGES;
если вы получаете some_other
вместо web2vi
, то вы должны соответственно изменить название.
Пользователь 'web2vi' не существует на вашем сервере MySQL.
См http://dev.mysql.com/doc/refman/5.1/en/error-messages-server.html#error_er_no_such_user
Если такой пользователь существует, проверить, какие серверы он может получить доступ, хотя я бы подумал, что была бы другая ошибка (например, вы могли бы web2vi@localhost, но вы обращаетесь к БД, как web2vi@% (на все)
Это случилось со мной после переноса БД с одного сервера на другой сервер. Сначала определитель с помощью localhost и пользователей. На новом сервере мы не'т иметь, что пользователей, и хозяин также был изменен. Я сделал резервную копию этой таблицы и удалены все триггеры вручную с помощью phpMyAdmin. После этого она работает хорошо для меня.
У меня была такая же проблема с корневой пользователь Анс он работал для меня, когда я заменил
root@%
по
root@localhost
Таким образом, если пользователь 'web2vi' разрешение на подключение от 'локальный', вы можете попробовать:
web2vi@localhost
Я'м подключен удаленно к базе данных.
grant all on *.* to 'username'@'%' identified by 'password' with grant option;
пример:
grant all on *.* to 'web2vi'@'%' identified by 'password' with grant option;
Попробуйте установить свой порядок, как
ПРИЗЫВАТЕЛЯ БЕЗОПАСНОСТИ
По умолчанию MySQL устанавливает процедуры обеспечения безопасности, как "определитель" от (создателя).. вы должны установить безопасность в "героя" по.
Мои 5 копеек.
У меня была такая же ошибка, пока я пытался выбрать из представления.
Однако появляется проблема, что этот взгляд, некоторые из другого вида, который был восстановлен из резервной копии с другого сервера.
и в самом деле, да, пользователя является недействительным, но не было очевидно, где с первого взгляда.
Ваше мнение, что "view_quotes" и, возможно, были скопированы из другой базы данных, где я web2vi " и; является допустимым Пользователем в базу данных, куда "web2vi" не является допустимым пользователем.<БР> Либо добавить в "web2vi" и пользователей к базе данных или изменять вид (как правило, удаление определитель='web2vi'@'%' части и выполнение скрипта будет делать трюк)
У меня была твоя же проблема минут назад, я столкнулся с этой проблемой после удаления неиспользуемого пользователей из MySQL.таблица пользователей, но делать альтер посмотреть починил, вот это полезная команда, что делает его очень простым:
SELECT CONCAT("ALTER DEFINER=`youruser`@`host` VIEW ",
table_name," AS ", view_definition,";") FROM
information_schema.views WHERE table_schema='databasename'
Смешайте это с MySQL в командной строке (предполагается, что *Никс, не знакомы с Windows):
> echo above_query | mysql -uuser -p > alterView.sql
> mysql -uuser -ppass databasename < alterView.sql
Примечание: команда создает и дополнительного Select concat на файл, делать с MySQL -uuser -ppass имя_базы_данных < alterView.в SQL` потерпеть неудачу, если вы не'т удалить его.
Источник: https://dba.stackexchange.com/questions/4129/modify-definer-on-many-views
Проблема понятна - MySQL не может найти пользователя, указанного как определитель.
Я столкнулся с этой проблемой после синхронизировать модель базы данных с сервера разработки, применяя его на localhost, внеся изменения в модель, а затем применять его на localhost. Видимо имелось ввиду (я изменил) определены и поэтому я не мог'обновление Т меня локальная версия.
Как для ремонта (легко):
Примечание: это включает в себя удаление так он работает просто отлично на вид, но убедитесь, что у вас есть резервные копии данных, если вы попробуете это на столах.
P. S. Это не является ни правильной, ни лучше-все вокруг исправить. Я просто выложил ее как возможную (и очень простое) решение.