Изменение определения хранимой процедуры

У меня есть около сотни хранимых процедур в моей базе данных MySQL, причем большинство из них имеют "root" в качестве определителя.

У меня есть другая учетная запись mysql с именем "abc" , как изменить определитель всех подпрограмм на "abc" .

Можно ли сделать то же самое, если у меня есть доступ к MySQL-серверу только как пользователь "abc" , а не как "root"

Ответ 1

Насколько я знаю: Вам нужно будет получить текст script из всех них и сбросить/воссоздать их как abc. Вы не сможете сделать это как abc, если у abc нет разрешения на удаление/создание процедур.

Ответ 2

Чтобы увидеть определителей:

show procedure status;

Вы можете изменить их следующим образом:

UPDATE `mysql`.`proc` p SET definer = 'YournewDefiner' WHERE definer='OldDefinerShownBefore'

Например:

 UPDATE `mysql`.`proc` p SET definer = '[email protected]%' WHERE definer='[email protected]%'

Будьте осторожны, потому что это изменит все определители для всех баз данных.

Ответ 3

Вы можете обновить определитель в таблице mysql.proc против требуемой таблицы /db...

update mysql.proc set definer='[email protected]' where name='t_p';

Ответ 4

Экспортировать все процедуры базы данных <DB>:

mysqldump --single-transaction --no-data --no-create-info --routines \
    --skip-triggers <DB> >routines.sql

Измените routines.sql и заново создайте их:

cat routines.sql | mysql <DB>

Укажите -u и -p, если необходимо.

Ответ 5

alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
 Your Sql Statement;
end//
delimiter ;