Изменить определитель хранимой процедуры
У меня есть около ста хранимых подпрограмм в моей базе данных 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 ;