zoukankan      html  css  js  c++  java
  • MySQL学习笔记:definer与sql security

      在以下例子中,出现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 

  • 相关阅读:
    Hitachi Programming Contest 2020 E Odd Sum Rectangle
    CF1060F Shrinking Tree
    UR #19
    AGC041F Histogram Rooks
    JOISC2020 Legendary Dango Maker
    Dinic 二分图匹配 / Hopcroft-Karp 算法 复杂度简单证明
    Codechef March Challenge 2020 Division 1 BREAK
    Tomorrow will be fine.
    JOISC2019 穿越时空 Bitaro
    POI2011 Periodicity
  • 原文地址:https://www.cnblogs.com/hider/p/9103073.html
Copyright © 2011-2022 走看看