2010-07-08 3 views
23

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

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

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

ответ

2

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

+2

@Mithun Ответ ниже должен быть отмечен как ответ. – hellowahab

72

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

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]%' 

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

+0

«показать статус процедуры» не работает для меня, но обновление действительно работает. Благодарю. –

+0

По умолчанию DEFINER создает, когда я создаю процедуру хранилища на общем узле godaddy в mysql db. Пример: CREATE DEFINER = 'sis' @'% 'ПРОЦЕДУРА' SP_Login'() Как удалить DEFINER? Пожалуйста, помогите мне решить эту проблему. Я ломаю голову на последние 2 дня. – Sensa

+0

это спасло меня после очистки пользователя – deltree

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

какой необычный способ –

1

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

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

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

cat routines.sql | mysql <DB> 

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

8

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

update mysql.proc set definer='[email protected]' where name='t_p'; 
Смежные вопросы