#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, к которым нет прямого доступа.