我一直在研究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
我的问题是,考虑到insert语句没有参数化,对SQL注入攻击有多安全?我尝试过对它进行最琐碎的攻击,并且报价被正确转义,但是有没有人进行过详尽的测试,或者还有其他什么东西可以保护我?
答案 0 :(得分:1)
您无需担心使用TVP进行SQL注入攻击。
这好像是一堆单身人士 打电话,但事实并非如此。作为我的同事 微软CSS的Keith Elmore指出 out,这只是使用的惯例 允许显示数据或 复制/粘贴到查询窗口和 跑。 TVP实际上并不是 以这种方式实现 - 行是 像散装一样流过 插入 - 但它可能导致了这一点 它的确很简单 插入