我对SQL世界还比较陌生,以下是我的问题:
- 存储过程相对于普通SQL语句在应用程序中有哪些好处?
- 存储过程有助于消除SQL注入吗?
- 在Microsoft SQL Server中称为存储过程,在Oracle、MySQL、DB2等数据库中呢?
感谢您的解答。
我对SQL世界还比较陌生,以下是我的问题:
感谢您的解答。
存储过程只有在以参数化方式调用它们时才能直接防止 SQL 注入。如果您仍然在应用程序中使用字符串来表示存储过程名称,并将用户输入的参数连接到该字符串中,那么仍会出现问题。
但是,当专门使用存储过程时,您可以通过禁用 EXEC 命令以外的所有权限来增加一些额外的保护。此外,参数化查询/预处理语句通常由服务器缓存,因此在几乎所有方面与存储过程类似。
尽管如此,对于大型企业而言,存储过程具有两个重要优势:
当然,这些优点也不是没有代价的:
在使用存储过程时,一些我认为的好处:
存储过程是否可以防止注入攻击?大部分情况下是可以的。在 SQL Server 中,您可以创建不受此影响的存储过程,主要是通过使用 sp_executesql。现在,这并不意味着 sp_executesql 是一个安全漏洞,只是意味着在使用它时需要更加谨慎。
这也并不意味着存储过程是防止注入攻击的唯一方法。您可以使用参数化 SQL 来完成相同的任务以防止 SQL 注入。
我同意其他人的看法,存储过程可能会很麻烦,但它们也有优点。在我工作的地方,我们可能有20个不同的生产数据库,出于各种原因(别问为什么)。我只处理其中的三个子集,我和我的队友非常了解这三个子集。存储过程如何帮助我们?当人们需要从这些数据库中获取信息时,他们来找我们,我们可以为他们获取信息。我们不必花费数小时来解释模式和哪些数据被去规范化。这是一层抽象,使我们能够针对我们所知道的数据库编写最有效的代码。如果这对你不适用,那么存储过程可能不是最好的选择,但在某些情况下,它们可以增加很多价值。