结论:如果不能够重用执行计划,那么就有SQL注入的风险,因为SQL的语意有可能会变化,所表达的查询就可能变化。\x0d\x0a\x0d\x0a 首先,什么是注入漏洞攻击呢?所谓SQL注入,就是通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。通常的解决方案有过滤敏感字符,比如说过滤掉or, and , select sql等关键字,通过参数化查询解决sql注入漏洞的实例。\x0d\x0a\x0d\x0a 所谓的参数化查询(Parameterized Query 或 Parameterized Statement)是指在设计与数据库链接并访问数据时,在需要填入数值或数据的地方,使用参数 (Parameter) 来给值,这个方法目前已被视为最有效可预防SQL注入攻击 (SQL Injection) 的攻击手法的防御方式。Microsoft SQL Server 的参数格式是以 "@" 字符加上参数名称而成.\x0d\x0a \x0d\x0a SQL 引擎的处理流程,大致为:收到指令 -> 编译SQL生成执行计划 ->选择执行计划 ->执行执行计划。\x0d\x0a参数化查询主要做了这些事情:\x0d\x0a1:参数过滤,对传入值进行了处理,按字符语义来处理。\x0d\x0a2:执行计划重用\x0d\x0a\x0d\x0a 为参数化查询可以重用执行计划,并且如果重用执行计划的话,SQL所要表达的语义就不会变化,所以就可以防止SQL注入,如果不能重用执行计划,就有可能出现SQL注入,存储过程也是一样的道理,因为可以重用执行计划。