sql >> Databasteknik >  >> RDS >> Sqlserver

SQL Server - Dynamisk PIVOT-tabell - SQL-injektion

Vi har gjort mycket arbete som liknar ditt exempel. Vi har inte oroat oss för SQL-injektion, delvis för att vi har fullständig och total kontroll över data som pivoteras - det finns helt enkelt inget sätt att skadlig kod kan ta sig genom ETL till vårt datalager.

Några tankar och råd:

  • Måste du pivotera med nvarcahr(500)-kolumner? Våra är varchar(25) eller numerics, och det skulle vara ganska svårt att smyga in skadlig kod där.
  • Vad sägs om datakontroll? Det verkar som om en av dessa strängar innehöll ett "]"-tecken, så är det antingen ett hackförsök eller data som kommer att explodera på dig ändå.
  • Hur robust är din säkerhet? Är systemet låst så att Malorey inte kan smyga in sina hack i din databas (varken direkt eller via din applikation)?

Hah. Det tog att skriva allt detta för att komma ihåg funktionen QUOTENAME(). Ett snabbt test verkar tyda på att det skulle fungera att lägga till den i din kod på det sättet (du får ett felmeddelande, inte en utebliven temptabell):

SELECT
        @columns = 
        STUFF
        (
                (
                        SELECT DISTINCT
                                ', [' + quotename(ColumnB, ']') + ']'
                        FROM
                                #PivotTest
                        FOR XML PATH('')
                ), 1, 1, ''
        )

Detta bör fungera för pivot- (och unpivot) situationer, eftersom du nästan alltid måste [bracket] dina värderingar.



  1. Hur man inaktiverar alla utlösare i SQL Server Database

  2. Vilka är skillnaderna mellan ett klustrat och ett icke-klustrat index?

  3. Få uppdaterad rad

  4. Tips för bättre databasdesign