mysql中使用者對儲存過程的許可權有:
alter routine 編輯或刪除儲存過程
create routine 建立儲存過程
execute執行儲存過程
儲存過程的建立者擁有儲存過程的alter、create、execute許可權。
詳細實驗後續補充。
definer用於指明儲存過程是由哪個使用者定義的,預設儲存過程的定義者是儲存過程,跟儲存過程的使用許可權無關。
invoker用於指定哪些使用者有呼叫儲存過程的許可權,此時會以呼叫者的許可權去執行儲存過程。
預設情況下被執行的儲存過程具有其建立者的許可權,比如使用者a建立了儲存過程p1,使用者b執行儲存過程p1時,只有使用者a有操作許可權的資料才能被p1操作。
假設使用者a只有create routine許可權,沒有select、update、delete等許可權,正常情況下儲存過程p1不能執行任何操作。如果在建立儲存過程p1時,使用 sql security invoker特徵子句,讓儲存過程使用執行者的許可權,這樣即使p1的建立者沒有資料操作許可權,p1也可以正常使用。
如果在建立儲存過程時指定為root@%,將有可能導致root@localhost在使用儲存過程時出現許可權問題。
相關操作方法:
檢視儲存過程的建立語句:
show create procedure 儲存過程名;
檢視儲存過程的資訊:
show procedure status like '儲存過程名'\g
檢視儲存過程的definer資訊:
select db,name,type,definer from mysql.proc where name='儲存過程名' and type='procedure';
建立儲存過程時指定definer欄位:
create
definer = 『root@localhost』 -- 預設值
procedure 儲存過程名 ........
測試儲存過程
delimiter $
create procedure p_t1(in id int)
begin
insert into mysql.t2 values(id,'a');
select count(*) from mysql.t2;
end$
delimiter ;
mysql 執行儲存過程的許可權
在應用程式中呼叫儲存過程,出現如下錯誤資訊 test procedure executed failed because driver requires declaration of procedure to either contain a nbegin or n to follow argume...
mysql建立儲存過程許可權問題
首先,在mysql儲存過程出現的同時,使用者許可權也增加了5種,其中和儲存過程有關的許可權有 三種 alter routine 編輯或刪除儲存過程 create routine 建立儲存過程 execute 執行儲存過程 在使用grant建立使用者的時候分配這三種許可權。儲存過程在執行的時候預設是使...
mysql儲存過程 MySQL儲存過程
在本節中,您將逐步學習如何在mysql中編寫和開發儲存過程。首先,我們向您介紹儲存過程的概念,並討論何時使用它。然後,展示如何使用過程 的基本元素,如建立儲存過程的語句,if else,case,loop,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...