gpt4 book ai didi

sql - 存储过程是否有助于消除 SQL 注入(inject)/存储过程与应用程序中的普通 SQL 语句相比有何优势?

转载 作者:太空狗 更新时间:2023-10-30 01:43:55 24 4
gpt4 key购买 nike

我是 SQL 世界的新手。这是我的问题:

  • 与应用程序中的普通 SQL 语句相比,存储过程有哪些优势?
  • 存储过程是否有助于消除 SQL 注入(inject)?
  • 在 Microsoft SQL Server 中,它称为存储过程。在 Oracle、MySQL、DB2 等中怎么样?

感谢您的解释。

最佳答案

如果您以参数化方式调用存储过程,则只能直接防止 SQL 注入(inject)。如果您的应用程序中仍然有一个带有过程名称的字符串,并且将用户输入的参数连接到代码中的该字符串,您仍然会遇到麻烦。

但是,当以独占方式使用时,存储过程可以让您禁用除 EXEC 命令以外的所有内容的权限,从而增加一些额外的保护。除此之外,参数化查询/准备语句通常由服务器缓存,因此几乎在每个方面都像存储过程。

尽管如此,存储过程对于大型企业有两大优势:

  • 它们允许您为数据库定义一个应用程序接口(interface),这样系统就可以在多个应用程序之间共享,而不必在这些应用程序中重复逻辑。
  • 他们将 sql 代码移至数据库,在那里您可以轻松地让经验丰富的 DBA 调整、更新和以其他方式维护它,而不是通常不知道他们在使用数据库代码做什么的应用程序开发人员。

当然,这些优势并非没有代价:

  • 很难跟踪源代码管理中的变化
  • 数据库代码与使用它的代码相距甚远
  • 用于管理许多存储过程的开发人员工具并不理想(如果您曾经在 Management Studio 中打开存储过程文件夹并找到一个数据库的 200 个过程,您就会明白我在这里说的是什么)。

关于sql - 存储过程是否有助于消除 SQL 注入(inject)/存储过程与应用程序中的普通 SQL 语句相比有何优势?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1174003/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com