对.NET应用程序中的每个SQL调用使用存储过程是最佳做法吗?
是否出于性能原因鼓励并减少SQL注入攻击的表面区域(在Web应用程序中)?
与参数化查询相比,存储过程具有一些优势:
独占使用时,可以关闭应用程序帐户的CREATE,INSERT,SELECT,UPDATE,ALTER,DROP,DELETE等访问权限,这样可以增加少量安全性.
当您有多个使用相同数据库的应用程序时,它们提供一致,可管理的界面.
即使在部署应用程序之后,使用过程也允许DBA管理和调优查询.
部署小的更改和错误修复要简单得多.
它们也有一些缺点:
程序的数量可以快速增长到难以维护它们的程度,并且当前的工具不能提供简单的方法来获得足够的文档.
参数化查询将数据库代码放在使用它的地方旁边.存储过程使它远离分离,使得查找相关代码更加困难.
存储过程更难以版本化.
您需要权衡系统的成本/收益.