MySQL學習筆記:definer與sql security
阿新 • • 發佈:2018-05-29
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