Sqlserver
 sql >> Database >  >> RDS >> Sqlserver

SQL Server - Tabella PIVOT dinamica - SQL injection

Abbiamo svolto molto lavoro simile al tuo esempio. Non ci preoccupiamo dell'ingiunzione di SQL, in parte perché abbiamo il controllo completo e totale sui dati che vengono sottoposti a pivot:semplicemente non è possibile che codice dannoso possa entrare attraverso ETL nel nostro data warehouse.

Alcuni pensieri e consigli:

  • È necessario eseguire il pivot con le colonne nvarcahr(500)? I nostri sono varchar(25) o numerici, e sarebbe piuttosto difficile introdursi di nascosto codice dannoso.
  • Che ne dici di controllare i dati? Sembra che se una di quelle stringhe contenesse un carattere "]", si tratta di un tentativo di hacking o di dati che ti esploderanno comunque.
  • Quanto è solida la tua sicurezza? Il sistema è bloccato in modo tale che Malorey non possa intrufolarsi nel tuo database (direttamente o tramite la tua applicazione)?

Ah. Ci è voluto scrivere tutto per ricordare la funzione QUOTENAME(). Un rapido test sembrerebbe indicare che aggiungerlo al tuo codice in questo modo funzionerebbe (riceverai un errore, non una tabella temporanea eliminata):

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

Questo dovrebbe funzionare per le situazioni pivot (e unpivot), dal momento che devi quasi sempre [tra parentesi] i tuoi valori.