MySQL 存儲過程 函數 routine 權限
Table of Contents
1 mysql存儲過程/函數權限
Mysql 某個用戶在執行存儲過程、函數時,需要檢查相關對象的操作權限,比如是否有執行 該函數的權限 ,某個用戶是否操作(DML)相關對象的權限 。
在創建存儲過程或者函數時,有一個關鍵詞,sql_security, 該關鍵詞決定了對哪個用戶進行權限檢查。下面是創建存儲過程或者函數的語法:
-
delimiter // -- 聲明分隔符(命令結束符) create definer = user@hostname | current_user [procedure| function] 對象名(參數) comment '注釋' sql security definer | invoker -- sql 的安全設置 begin body end // delimiter ; -- 聲明分隔符(命令結束符)
1.1 相關對象操作權限檢查
sql_security 主要 是檢查調用 者或者definer指定的用戶,有沒有操作相關對象的權限 。 該選項有兩種值可選,一個是definer,一個是invoker.
-
DEFINER
definer 檢查指定的用戶, 創建存儲過程時可以省略掉。省略時,默認DEFINER=CURRENT_USER.
sql security 設置為definer時,則數據庫根據definer 是否有操作相應對象的權限 。
-
INVOKER
檢查調用存儲過程/函數的用戶是否有操作相應對象的處理權限 。
1.2 執行權限
Mysql可以(取消)授權給指定用戶去執行某個存儲過程或者函數等。
-
授權給指定用戶
grant execute on <schema>.<procedure_name> to 'user'@'host';
-
取消授權
revoke execute on <schema>.<procedure_name> from 'user'@'host';
Created: 2019-07-18 Thu 17:49