MySQL 8: Изменить определение хранимой процедуры

#mysql

#mysql

Вопрос:

В версиях MySQL, предшествующих 8, изменение определителя хранимой процедуры возможно путем манипулирования mysql.proc таблицей. Эта таблица была удалена в версии 8 и заменена словарем данных. Похоже, что определитель можно изменить с помощью ALTER PROCEDURE , но ни за что на свете я не могу заставить указанный синтаксис работать.

 mysql> alter procedure refresh_basic sql security definer=`foo`@`127.0.0.1`;                                                                                                                
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '=`foo`@`127.0.0.1`' at line 1
  
 mysql> alter procedure refresh_basic sql security definer='foo@127.0.0.1';                                                                                                                  
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '='foo@127.0.0.1'' at line 1
  

Я также попробовал оба вышеперечисленных способа без использования = , но получил похожие ошибки. Как на самом деле это делается? Спасибо!

Комментарии:

1. Поскольку определитель является учетной записью пользователя MySQL , он должен быть в формате 'user'@'host' format.так что это должно быть definer='foo'@'127.0.0.1' .. Похоже, это вопрос типа «проблема, которую больше нельзя воспроизвести, или простая типографская ошибка» , поэтому, скорее всего, этот вопрос будет закрыт для голосования.

2. В документации, на которую вы ссылаетесь, говорится, Quote user names and host names as identifiers or as strings, using either backticks (`), single quotation marks ('), or double quotation marks ("). что я использовал обратные ссылки в своем первом фрагменте кода.

3. Вы можете изменить контекст безопасности между DEFINER и INVOKER alter procedure только с помощью-command, но не изменять сам определитель. Похоже, вам нужно воссоздать процедуру, чтобы установить правильный определитель. Определитель хранится в таблицах mysql.routines, к которым нет прямого доступа.