我在我的MySQL數據庫中有大約一百個存儲例程,其中大多數具有「root」作爲定義者。更改存儲過程定義器
我有另一個名爲'abc'的mysql帳戶,如何將所有例程的定義改爲'abc'。
是否有可能做同樣的,如果我有機會到MySQL服務器只爲「ABC」的用戶,而不是作爲「根」
我在我的MySQL數據庫中有大約一百個存儲例程,其中大多數具有「root」作爲定義者。更改存儲過程定義器
我有另一個名爲'abc'的mysql帳戶,如何將所有例程的定義改爲'abc'。
是否有可能做同樣的,如果我有機會到MySQL服務器只爲「ABC」的用戶,而不是作爲「根」
據我所知: 你就一定得的腳本文本他們都放棄/重新創建它們爲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]%'
要小心,因爲這將改變所有的定義者爲所有數據庫。
alter procedure old_proc_name
delimiter //
create PROCEDURE new_proc_name (parameter)
begin
Your Sql Statement;
end//
delimiter ;
什麼是不尋常的方式 – 2017-07-04 06:50:53
導出所有的數據庫<DB>
的程序:
mysqldump --single-transaction --no-data --no-create-info --routines \
--skip-triggers <DB> >routines.sql
編輯routines.sql
並重新創建它們:
cat routines.sql | mysql <DB>
如果需要,指定-u
和-p
開關。
您可以更新針對所需的表/ DB mysql.proc的表定義者...
update mysql.proc set definer='[email protected]' where name='t_p';
@Mithun下面的答案應該標記爲答案。 – hellowahab 2014-12-29 09:13:46