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

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

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

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

9 ответов

Решение

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

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

show procedure status;

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

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

Например:

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

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

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

update mysql.proc set definer='root@localhost' 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 переключается при необходимости.

Я внес массовые изменения в Определитель, экспортировав базу данных, открыв экспортированный файл в текстовом редакторе (не в текстовом редакторе) и выполнив поиск и замену, обменяв новый Определитель на старый. Затем я переименовываю исходную базу данных и создаю новую с именем исходной базы данных. Просто импортируйте измененный файл экспорта с новой информацией определителя, и все готово. Мне нравится это решение, потому что оно дает мне запасной вариант, если что-то пойдет не так. Если что-то не работает, отбросьте созданную базу данных и переименуйте копию.

У меня эта проблема, наконец, решена с помощью метода ниже. я получил эту ошибку: 1449 при вставке данных в таблицу. Решение: перейти к опции триггеров, пользователь должен указать несколько дриггеров, прежде чем удалять их оттуда. вот и все, что у вас есть, теперь вы можете выполнять операции с таблицей в phpmydmin

вместо этого используйте простой метод, создайте пользователя (abc), увеличьте для него все разрешения и в строке подключения подключите

с абв. будет работать лучше, версия mysql 8 не поддерживает mysql. proc

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

      update mysql.proc set definer = "root@localhost" where db = "mydatabase";
alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
 Your Sql Statement;
end//
delimiter ;
Другие вопросы по тегам