Изменить определитель хранимой процедуры - PullRequest
26 голосов
/ 08 июля 2010

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

У меня есть еще одна учетная запись mysql с именем «abc», как изменить определительвсе подпрограммы для 'abc'.

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

Ответы [ 5 ]

84 голосов
/ 04 марта 2011

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

show procedure status;

Вы можете изменить их так:

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

Например:

 UPDATE `mysql`.`proc` p SET definer = 'user@%' WHERE definer='root@%'

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

9 голосов
/ 05 октября 2014

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

update mysql.proc set definer='root@localhost' where name='t_p';
5 голосов
/ 08 июля 2010

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

1 голос
/ 12 апреля 2014

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

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

Редактирование routines.sql и воссоздание их:

cat routines.sql | mysql <DB>

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

0 голосов
/ 29 апреля 2013
alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
 Your Sql Statement;
end//
delimiter ;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...