动态TSQL中的WHERE子句并阻止SQL注入

时间:2012-06-24 16:33:26

标签: where-clause dynamic-sql

我有一个用于选择行的存储过程。我想传递一个参数来动态过滤行,如下所示:

Create Procedure CustomerSelectAll
   @FilterExpresion NVARCHAR(MAX)

DECLARE @CMD NVARCHAR(MAX)

SET @CMD = N'SELECT * FROM dbo.Customers '+@FilterExpresion;

EXEC(@CMD)

上面的代码工作正常,但它有SQL注入的风险,所以我希望能够使用任何WHERE语句传递多个列,例如:

exec CustomerSelectAll
   @FilterExpresion = N' where Name = 'abc' and family = ''xyz'''

1 个答案:

答案 0 :(得分:0)

我不知道你是否可以将整个where子句作为参数传递。但是从我所拥有的少量知识中,我可以建议你使用sql parser来查看where子句是否只有select语句和如果答案是肯定的,那么您可以将where子句传递给存储过程。希望这有一些帮助。

相关问题