Pregunta

He estado investigando los parámetros con valores de tabla en SQL Server 2008, y descubrí que al pasar dicho parámetro a un procedimiento almacenado, se envía una consulta como la siguiente al servidor de la base de datos:

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

Mi pregunta es, ¿qué tan seguro frente a los ataques de inyección SQL es esto, dado que las instrucciones de inserción no están parametrizadas? Intenté el ataque más trivial contra él, y las citas se escaparon correctamente, pero ¿alguien ha realizado una prueba exhaustiva o hay algo más aquí que me proteja?

¿Fue útil?

Solución

No necesita preocuparse por los ataques de inyección SQL con TVP.

  

Esto parece un montón de singleton   llama pero no lo es. Como mi colega   Keith Elmore en Microsoft CSS señaló   fuera, esa es solo la convención utilizada   para permitir que se muestren los datos o   copiado / pegado en una ventana de consulta y   correr. El TVP no es realmente   implementado de esa manera: las filas son   transmitido como un bulto   insertar, pero puede haber llevado a esto   impresión de que lo hace simple   insertos.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top