Udělali jsme hodně práce podobné vašemu příkladu. Z injekce SQL jsme se nebáli, zčásti proto, že máme úplnou a úplnou kontrolu nad daty, která se pivotuje – prostě neexistuje způsob, jak by se škodlivý kód mohl dostat přes ETL do našeho datového skladu.
Pár myšlenek a rad:
- Požadujete pivotování pomocí sloupců nvarcahr(500)? Naše jsou varchar(25) nebo numerické a bylo by docela těžké propašovat tam škodlivý kód.
- Co takhle kontrola dat? Zdá se, že pokud jeden z těchto řetězců obsahoval znak „], je to buď pokus o hack, nebo data, která na vás stejně vybuchnou.
- Jak robustní je vaše zabezpečení? Je systém uzamčen tak, že Malorey nemůže propašovat své hacky do vaší databáze (ať už přímo, nebo prostřednictvím vaší aplikace)?
Cha. Abychom si zapamatovali funkci QUOTENAME(), trvalo to napsat vše. Zdá se, že rychlý test naznačuje, že přidání do vašeho kódu by fungovalo (objeví se chyba, nikoli vypuštěná tabulka temp):
SELECT
@columns =
STUFF
(
(
SELECT DISTINCT
', [' + quotename(ColumnB, ']') + ']'
FROM
#PivotTest
FOR XML PATH('')
), 1, 1, ''
)
To by mělo fungovat pro pivotní (a unpivot) situace, protože téměř vždy musíte své hodnoty [závorky].