2010-07-08 76 views
23

我在我的MySQL數據庫中有大約一百個存儲例程,其中大多數具有「root」作爲定義者。更改存儲過程定義器

我有另一個名爲'abc'的mysql帳戶,如何將所有例程的定義改爲'abc'。

是否有可能做同樣的,如果我有機會到MySQL服務器只爲「ABC」的用戶,而不是作爲「根」

回答

2

據我所知: 你就一定得的腳本文本他們都放棄/重新創建它們爲abc。除非abc有權刪除/創建過程,否則您將無法以abc的方式執行此操作。

+2

@Mithun下面的答案應該標記爲答案。 – hellowahab 2014-12-29 09:13:46

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

「顯示程序狀態」不適用於我,但更新確實有效。謝謝。 – 2011-11-07 19:45:10

+0

默認情況下,DEFINER正在創建當我在mysql db下的godaddy共享主機中創建存儲過程。示例:CREATE DEFINER ='sis' @'%'PROCEDURE'SP_Login'()如何刪除DEFINER?請幫我解決這個問題,我最近兩天打破了我的頭。 – Sensa 2012-04-24 10:37:45

+0

在用戶清理後,這節省了我 – deltree 2012-10-11 02:49:57

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

什麼是不尋常的方式 – 2017-07-04 06:50:53

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

您可以更新針對所需的表/ DB mysql.proc的表定義者...

update mysql.proc set definer='[email protected]' where name='t_p';