Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

SQL Server - Динамична PIVOT таблица - SQL инжекция

Направихме много работа, подобна на вашия пример. Не сме се притеснявали за SQL инжектиране, отчасти защото имаме пълен и пълен контрол върху данните, които се завъртат – просто няма начин злонамерен код да проникне през ETL в нашия склад за данни.

Някои мисли и съвети:

  • Трябва ли да се върти с колони nvarcahr(500)? Нашите са varchar(25) или числови и би било доста трудно да се промъкне увреждащ код там.
  • Какво ще кажете за проверката на данните? Изглежда, че ако един от тези низове съдържа знак „]“, това е или опит за хакване, или данни, които така или иначе ще ви взривят.
  • Колко стабилна е вашата сигурност? Системата заключена ли е така, че Малори не може да вмъкне своите хакове във вашата база данни (директно или чрез вашето приложение)?

Хах Отне написването на всичко това, за да се запомни функцията QUOTENAME(). Бърз тест изглежда показва, че добавянето му към вашия код по този начин би работило (Ще получите грешка, а не изпусната времева таблица):

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

Това би трябвало да работи за ситуации на въртене (и отменяне), тъй като почти винаги трябва да поставяте стойностите си в [скоби].



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Причини за надстройка до SQL Server 2017

  2. Поведение на плана за заявка за темпорална таблица на SQL Server 2016

  3. Автоматизирайте заданията за архивиране и поддръжка с помощта на план за поддръжка в SQL Server

  4. Отстраняване на проблеми при работа с дата и час в SQL Server

  5. Подзаявка, използваща Exists 1 или Exists *