Когда я запускаю следующий запрос, я получаю сообщение об ошибке:
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
Почему я получаю эту ошибку? Как мне это исправить?
mysql
permissions
Tech MLG
источник
источник
view_quotes
вид.Ответы:
Это обычно происходит при экспорте представлений / триггеров / процедур из одной базы данных или сервера на другой, поскольку пользователь, создавший этот объект, больше не существует.
У вас есть два варианта:
1. Измените ОПРЕДЕЛИТЕЛЬ
Возможно, это проще всего сделать при первоначальном импорте объектов базы данных, удалив все
DEFINER
операторы из дампа.Менять определитель позже немного сложнее:
Как изменить определитель для просмотров
Запустите этот SQL, чтобы сгенерировать необходимые операторы ALTER
Скопируйте и запустите операторы ALTER.
Как изменить определитель для хранимых процедур
Пример:
Будьте осторожны, потому что это изменит все определители для всех баз данных.
2. Создайте пропавшего пользователя
С http://www.lynnnayko.com/2010/07/mysql-user-specified-as-definer-root.html
Это работает как чудо - вам нужно только изменить
someuser
имя пропавшего пользователя. На локальном сервере разработчика вы можете просто использоватьroot
.Также подумайте, нужно ли вам на самом деле предоставлять
ALL
разрешения пользователям или они могут делать с меньшими затратами.источник
mysql
.proc
P SET definer = 'user @%' WHERE definer = 'root @%'", поскольку определители процедур обновляются только тогда.DEFINER=`user`@`host`
и повторно импортировал ее. Работал как шарм. : ok_hand:Пользователь, который первоначально создал представление или процедуру SQL, был удален. Если вы воссоздаете этого пользователя, он должен устранить вашу ошибку.
источник
SELECT
иEXECUTE
привилегии для добавленного пользователя. Я столкнулся с этим, когда экспортировал резервную копию БД с одного сервера на другой, где пользователь, создавший подпрограммы, не существовал на тестовом сервере.DROP
затем повторноCREATE
) с использованием действительного пользователя в целевой системе.UPDATE mysql.proc SET definer = 'my_new_user@localhost' WHERE db = 'mydatatbase';
GRANT ALL ON *.* TO 'someuser'@'%' IDENTIFIED BY 'complex-password'; FLUSH PRIVILEGES;
Я получил ту же ошибку после обновления MySQL.
Ошибка была исправлена после этой команды:
источник
Если пользователь существует, то:
источник
Создайте удаленного пользователя следующим образом:
или
источник
ERROR 1142 (42000): TRIGGER command denied to user 'web2vi'@'%' for table 'foo'
и должен добавить эту командуgrant all on *.* to 'web2vi'@'%' identified by ''
после создания пользователяСледуй этим шагам:
Надеюсь, поможет
источник
Решение - это просто однострочный запрос, как показано ниже:
Замените
ROOT
на ваше имя пользователя mysql. ЗаменитеPASSWORD
своим паролем MySQL.источник
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 @% (при любом)
источник
быстрое решение, чтобы обойти и сбросить файл:
источник
--single-transaction
меняется способ реализации таблиц блокировок во время дампа. Или что-то типа того. Я не помню, где я читал это, но это помогло мне чувствовать себя комфортно с «просто бросить флаг». Я также обеспокоен необъяснимыми «просто делай это» «ответами». В любом случае, это сработало для моего случая.пример:
источник
Это случилось со мной после перемещения БД с одного сервера на другой. Первоначально определитель использовал localhost и пользователя. На новом сервере у нас нет этого пользователя, и хост также был изменен. Я сделал резервную копию этой конкретной таблицы и удалил все триггеры вручную из phpmyadmin . После этого он работал нормально для меня.
источник
У меня была такая же проблема с пользователем root и у меня это работало когда я заменил
по
Итак, если пользователю «web2vi» разрешено подключаться с «localhost», вы можете попробовать:
Я подключен удаленно к базе данных.
источник
Мои 5 центов.
У меня была та же ошибка, когда я пытался выбрать из вида.
Однако проблема заключается в том, что это представление выбрано из другого представления, которое было восстановлено из резервной копии с другого сервера.
и фактически, ДА, пользователь был недействителен, но не было очевидно, куда с первого взгляда.
источник
У меня была та же самая проблема несколько минут назад, я столкнулся с этой проблемой после удаления неиспользуемого пользователя из таблицы mysql.user, но, выполнив представление alter, исправил ее, вот удобная команда, которая делает ее очень простой:
Смешайте это с командной строкой mysql (при условии * nix, не знакомый с windows):
Примечание: команда генерирует и дополнительный SELECT CONCAT для файла, что приводит к
mysql -uuser -ppass databasename < alterView.sql
сбою, если вы не удалите его.Источник: /dba/4129/modify-definer-on-many-views
источник
Попробуйте установить вашу процедуру как
SECURITY INVOKER
Mysql по умолчанию устанавливает безопасность процедур как "DEFINER" (CREATOR OF). Вы должны установить безопасность для "invoker".
источник
По вашему мнению, «view_quotes» может быть скопировано из другой базы данных, где «web2vi» является действительным пользователем, в базу данных, где «web2vi» не является действительным пользователем.
Либо добавьте пользователя «web2vi» в базу данных, либо измените представление (обычно удаляя часть DEFINER = 'web2vi' @ '%' и выполняя сценарий, вы добьетесь цели)
источник
В моем случае в таблице был триггер с пользователем DEFINER, которого не было.
источник
Из MySQL ссылка на
CREATE VIEW
:Этот пользователь должен существовать и всегда лучше использовать localhost в качестве имени хоста. Поэтому я думаю, что если вы проверите, что пользователь существует, и измените его на «localhost» при создании представления, у вас не будет этой ошибки.
источник
Проблема ясна - MySQL не может найти пользователя, указанного как определитель.
Я столкнулся с этой проблемой после синхронизации модели базы данных с сервера разработки, применения ее к localhost, внесения изменений в модель и последующего применения ее к localhost. Очевидно, было определено представление (я изменил), и поэтому я не мог обновить свою локальную версию.
Как исправить (легко) :
Примечание: он включает удаление, поэтому он отлично работает для представлений, но убедитесь, что у вас есть резервная копия данных, если вы попробуете это для таблиц.
PS Это не является ни правильным, ни лучшим универсальным решением. Я только что опубликовал это как возможное (и очень простое) решение.
источник
Вы можете попробовать это:
источник
Я потратил час, прежде чем нашел решение такой проблемы. Но, в моем случае, я запустил это:
Если вы действительно хотите найти проблему, просто запустите эти команды одну за другой:
... и после каждого из них ищите поле «определитель».
В моем случае это был старый бородатый триггер, который кто-то из разработчиков забыл удалить.
источник
Перейдите в раздел процедуры редактирования и, внизу, измените Тип безопасности с Определителя на Invoker.
источник
Один или несколько ваших просмотров были созданы / зарегистрированы другим пользователем. Вам нужно будет проверить владельца вида и:
'web2vi'
с помощью ALTER VIEW.У меня была эта проблема однажды.
Я пытался перенести представления с BD1 на BD2, используя SQLYog. SQLYog воссоздал представления в другой базе данных (DB2), но сохранил пользователя BD1 (они были разными). Позже я понял, что представления, которые я использовал в своем запросе, имели ту же ошибку, что и вы, даже когда я не создавал никакого представления.
Надеюсь, это поможет.
источник
Если это хранимая процедура, вы можете сделать:
Но это не рекомендуется.
Для меня лучшим решением будет создать определитель:
источник
когда mysql.proc пуст, но система всегда замечает «user@192.168.%» для table_name не существует, вы просто root в командной строке mysql и введите:
над!
источник
Это случилось со мной после того, как я импортировал дамп в Windows 10 с MYSQL Workbench 6.3 Community, с «root @% не существует». Хотя пользователь существовал. Сначала я попытался закомментировать DEFINER, однако, это не сработало. Затем я заменил строку на «root @%» на «root @ localhost» и заново импортировал дамп. Это помогло мне.
источник
Попробуйте это Это простое решение
больше на https://stackoverflow.com/a/42183702/5407056
источник
Пользователь базы данных также, похоже, чувствителен к регистру, поэтому, хотя у меня был пользователь root '@'%, у меня не было пользователя ROOT '@'%. Я изменил пользователя на верхний регистр через верстак, и проблема была решена!
источник