【问题标题】:What is the purpose of this MySQL procedure?这个 MySQL 过程的目的是什么?
【发布时间】:2021-10-22 21:44:57
【问题描述】:

很多事情都有以下程序。这样做有什么好处?有什么安全优势吗?

 DELIMITER //
    CREATE
        DEFINER = 'webappuser'@'localhost' PROCEDURE find_number_users()
        SQL SECURITY INVOKER
    BEGIN
        SELECT COUNT(*) as total_users FROM user WHERE userCost = 1;
    END;
    //
    DELIMITER ;

【问题讨论】:

  • 存储过程可用于 a) 对调用它的代码隐藏实现细节,b) 缩短/简化调用它的代码,以及 c) 以上两者。
  • 优点?在很少和没有之间。缺点?一份洗衣单。
  • @Bohemian 有安全专家吗?
  • “任何安全专家?”,几乎没有。在有驱动用例/需求之前避免使用存储过程。
  • 它对可重用性很有用,它提高了代码的可读性,它还增加了一个具有访问控制的安全层。

标签: mysql sql stored-procedures


【解决方案1】:

过程可用于实现一些简单的安全机制。

如果一个过程是用SQL SECURITY DEFINER 定义的,那么它会在定义者的授权下运行。这允许您限制对某些数据库或表的访问,但随后允许受限用户执行访问它们的过程。因此他们不能编写访问表的任意查询,但他们可以通过定义过程的数据库管理员控制的方式获取数据。

你展示的程序有SQL SECURITY INVOKER,所以它没有利用这个功能。

这也可以通过视图来完成。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-28
    • 2016-02-20
    • 2019-10-04
    • 1970-01-01
    • 2011-02-14
    • 2014-01-19
    相关资源
    最近更新 更多