mysql儲存過程的許可權 definer

2021-09-06 15:06:58 字數 1152 閱讀 5729

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,儲存過程的引數。下面每個教程都包含了易於理解的示例和詳細的說明。如果您瀏覽並學習所有教程,您可...