施勇

只争朝夕

MySQL中创建存储过程时通过DEFINER和SQL SECURITY设置访问权限

procedure与function、trigger等创建时紧接着CREATE都有个definer可选项,该definer规定了访问该procedure等的安全控制。

CREATE DEFINER = `bigdata1`@`192.168.%` PROCEDURE `Test`()
BEGIN
   ......
END;

上面示例指定definer为用户bigdata1@192.168.%,所以任意用户A访问该PROCEDURE 时,能否成功取决于A是否有调用该PROCEDURE的权限,以及definer是否有procedure中的SELECT的权限。

DEFINER默认为当前用户,也可指定其他用户。如果想通过访问者来判断是否具有访问该PROCEDURE 的权限,则可用SQL SECURITY指定。

CREATE DEFINER = `bigdata1`@`192.168.%` PROCEDURE `Test`()
    SQL SECURITY INVOKER
BEGIN
   ......
END;

该示例虽然指定了DEFINER ,但同时也指定了SQL SECURITY 类型为INVOKER ,SQL SECURITY 优先级高,所以安全类型为INVOKER,用户能否访问取决于用户是否有执行该PROCEDURE 的权限及该PROCEDURE 中的SELECT 权限(与select操作的表有关)。
当然,也可用SQL SECURITY 指定DEFINER:SQL SECURITY DEFINER

阅读更多
版权声明:本文由施勇原创,转载请注明作者和出处! https://blog.csdn.net/shiyong1949/article/details/76435499
文章标签: mysql procedure
个人分类: MySQL
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭