Sicheres dynamisches SQL mit sp_executesql
Dynamisches SQL ist für optionale Filter und variable Abfrageformen nützlich. Stringverkettung erzeugt jedoch Injection-Risiken, Quote-Fehler, schlechte Planwiederverwendung und schwierige Fehlersuche.
Sicheres dynamisches SQL mit sp_executesql
Dynamisches SQL ist für optionale Filter und variable Abfrageformen nützlich. Stringverkettung erzeugt jedoch Injection-Risiken, Quote-Fehler, schlechte Planwiederverwendung und schwierige Fehlersuche.
Was gemessen werden sollte
Prüfen Sie, wie Werte in die Anweisung gelangen, ob Bezeichner eingeschränkt sind, ob Parameter exakt typisiert sind und wie viele unterschiedliche Pläne der Text erzeugt.
Praktisches Vorgehen
Übergeben Sie Werte als sp_executesql-Parameter, erlauben Sie nur bekannte Bezeichner und schützen Sie sie mit QUOTENAME, halten Sie den Text pro Abfrageform stabil und protokollieren Sie Vorlage und Werte getrennt.
Was vermieden werden sollte
Verketten Sie keine Benutzereingaben, behandeln Sie QUOTENAME nicht als Schutz beliebiger Werte und deklarieren Sie nicht jede Zeichenfolge als nvarchar(max).
Betriebliches Ergebnis
Dynamisches SQL bleibt sicher und wartbar, wenn die Struktur kontrolliert und die Daten parametrisiert sind.
Checkliste für die Produktion
Erfassen Sie eine Ausgangsbasis und definieren Sie die erwartete Verbesserung. Testen Sie mit repräsentativen Daten und realistischer Parallelität. Sichern Sie die ursprüngliche Einstellung oder den Plan, bereiten Sie einen Rollback vor und überwachen Sie die nächste normale Lastspitze.
Wenn Sie diese Methode auf eine konkrete SQL-Server-Umgebung anwenden möchten, nutzen Sie das Frageformular unten und nennen Sie SQL-Server-Version, Datenbankgröße, Lastprofil und bereits erfasste Nachweise.