Ответ 1
Насколько я знаю: Вам нужно будет получить текст script из всех них и сбросить/воссоздать их как abc. Вы не сможете сделать это как abc, если у abc нет разрешения на удаление/создание процедур.
У меня есть около сотни хранимых процедур в моей базе данных MySQL, причем большинство из них имеют "root" в качестве определителя.
У меня есть другая учетная запись mysql с именем "abc" , как изменить определитель всех подпрограмм на "abc" .
Можно ли сделать то же самое, если у меня есть доступ к MySQL-серверу только как пользователь "abc" , а не как "root"
Насколько я знаю: Вам нужно будет получить текст script из всех них и сбросить/воссоздать их как abc. Вы не сможете сделать это как abc, если у abc нет разрешения на удаление/создание процедур.
Чтобы увидеть определителей:
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]%'
Будьте осторожны, потому что это изменит все определители для всех баз данных.
Вы можете обновить определитель в таблице mysql.proc против требуемой таблицы /db...
update mysql.proc set definer='[email protected]' where name='t_p';
Экспортировать все процедуры базы данных <DB>
:
mysqldump --single-transaction --no-data --no-create-info --routines \
--skip-triggers <DB> >routines.sql
Измените routines.sql
и заново создайте их:
cat routines.sql | mysql <DB>
Укажите -u
и -p
, если необходимо.
alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
Your Sql Statement;
end//
delimiter ;