1. 程式人生 > >MySQL學習筆記:definer與sql security

MySQL學習筆記:definer與sql security

proc gin clas 默認 value 操作 有關 col 存儲過程

  在以下例子中,出現definer於sql security invoker,導致不解,遂學習一翻。

# 創建存儲過程
DELIMITER $$
CREATE DEFINER = Hider@localhost PROCEDURE p(vRows INT)
    SQL SECURITY INVOKER
BEGIN
WHILE vRows > 0 DO
INSERT tb(VALUE) VALUES(NOW());
SET vRows = vRows - 1;
END WHILE;
END $$
DELIMITER ;

  procedure於function、trigger等在創建的時候,緊接著create都有個definer可選項,該definer規定了訪問該procedure等的安全控制。

  一、DEFINER

  例如上面的例子中,指定definer為用戶Hider@localhost,所以任意用戶A訪問該PROCEDURE 時,能否成功取決於A是否有調用該PROCEDURE的權限,以及definer是否有procedure中的SELECT的權限。

  二、SQL SECURITY

  DEFINER默認為當前用戶,也可指定其他用戶。如果想通過訪問者來判斷是否具有訪問該PROCEDURE 的權限,則可用SQL SECURITY指定。

DELIMITER $$
CREATE DEFINER = Hider@localhost PROCEDURE p(vRows INT)
    SQL SECURITY INVOKER
BEGIN BODY END $$ DELIMITER ;

  該示例雖然指定了DEFINER ,但同時也指定了SQL SECURITY 類型為INVOKER ,SQL SECURITY 優先級高,所以安全類型為INVOKER,用戶能否訪問取決於用戶是否有執行該PROCEDURE 的權限及該PROCEDURE 中的SELECT 權限(與select操作的表有關)。

  當然,也可用SQL SECURITY 指定DEFINER:SQL SECURITY DEFINER


END 2018-05-29 00:35:10

MySQL學習筆記:definer與sql security