1

我一直在研究 SQL Server 2008 中的表值参数,我发现当将这样的参数传递给存储过程时,会向数据库服务器发送如下查询:

declare @p1 dbo.MyTypeName
insert into @p1 values(N'row1col1',N'row1col2')
insert into @p1 values(N'row2col1',N'row2col2')
insert into @p1 values(N'row3col1',N'row3col2')
insert into @p1 values(N'row4col1',N'row4col2')
insert into @p1 values(N'row5col1',N'row5col2')

exec StoredProcedureName @MyParam=@p1

我的问题是,鉴于插入语句没有参数化,这对 SQL 注入攻击有多安全?我尝试了最微不足道的攻击,并且引号被正确地转义了,但是有没有人进行了详尽的测试,或者这里还有其他事情可以保护我吗?

4

1 回答 1

1

您无需担心使用 TVP 的 SQL 注入攻击。

这似乎是一堆单例调用,但事实并非如此。正如我在 Microsoft CSS 的同事 Keith Elmore 所指出的,这只是用于允许数据显示或复制/粘贴到查询窗口并运行的约定。TVP 实际上并没有以这种方式实现——行就像批量插入一样流式传输——但它可能导致了这样的印象,即它执行简单的插入。

来源:http: //blogs.msdn.com/mikecha/archive/2009/08/07/two-fast-ways-to-bulk-insert-client-generated-data-to-sql-database.aspx

于 2009-09-14T18:13:35.987 回答