我对 SQL 世界还很陌生。这是我的问题:
- 与应用程序中的普通 SQL 语句相比,存储过程有哪些优点?
- 存储过程有助于消除 SQL 注入吗?
- 在 Microsoft SQL Server 中,它称为存储过程。在 Oracle、MySQL、DB2 等中怎么样?
谢谢你的解释。
仅存储过程directly如果您以参数化方式调用它们,则可以防止 SQL 注入。如果您的应用程序中仍然有一个带有过程名称的字符串,并将用户输入的参数连接到代码中的该字符串,您仍然会遇到麻烦。
然而,当使用只,存储过程允许您禁用除 EXEC 命令之外的所有内容的权限,从而添加一些额外的保护。除此之外,参数化查询/准备语句通常由服务器缓存,因此几乎在每个方面都像存储过程一样。
尽管如此,存储过程对于大型企业来说有两大优势:
- 它们允许您为数据库定义应用程序接口,以便可以在多个应用程序之间共享系统,而不必在这些应用程序中重复逻辑。
- 他们将 sql 代码移至数据库,在那里您可以轻松地让经验丰富的 DBA 调整、更新或以其他方式维护它,而不是经常不知道自己在使用数据库代码做什么的应用程序开发人员。
当然,这些优势并非没有代价:
- 跟踪源代码控制的变化更加困难
- 数据库代码与使用它的代码相距甚远
- 用于管理许多存储过程的开发人员工具并不理想(如果您曾经在 Management Studio 中打开存储过程文件夹来查找数据库的 200 个过程,您就知道我在这里所说的是什么)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)