【发布时间】:2013-01-07 15:45:26
【问题描述】:
正如我在以下博客中所读到的......
http://www.sommarskog.se/dynamic_sql.html
动态 sql 是不安全的,这就是我们有 sp_execute SQL 的原因。
请问,有什么方法可以让 sp_execute 运行这样的程序...
declare @QueryMain as varchar(8000)
declare @QueryBody as varchar(8000)
declare @QueryWhere as varchar(8000)
set @QueryMain = <8000 charactes>
set @QueryBody = <8000 characters>
set @QueryWhere = <8000 characters>
exec (@queryMain+@QueryBody+@QueryWhere)
这会运行,但正如我在文章中读到的那样,不建议这样做......但我想知道是否有另一种方式来运行这种查询......我试图合并 3 个变量到 ntext 但它没有工作,顺便说一句......上面的示例查询将在查询中有其他变量,可能是日期,用户 ID,任何东西!
我正在使用 sql server 2000 顺便说一句...正如我用谷歌搜索的那样,我没有发现如何为 sql server 2000 操作大字符串的结果,但我有 SQLi 攻击的这种后果。
【问题讨论】:
-
为什么要运行这种查询?您将始终拥有实际的 SQL 语句,因为您正在构建它。您是否试图通过一段代码来运行它?
-
@twoleggedhorse 因为我将每个 sql 脚本从系统迁移到存储过程,经过我的测试,sql 脚本容易受到 sql 注入的影响。他们是我们过去程序员开发的遗留系统,却忽略了这种威胁的风险。
标签: sql tsql stored-procedures dynamic sql-server-2000