Sichere Übergabe von Tabellennamen an gespeicherte SQL Server-Prozeduren
Die dynamische Übergabe von Tabellennamen an gespeicherte Prozeduren erhöht die Datenbankflexibilität. Allerdings muss die Sicherheit im Vordergrund stehen. In diesem Handbuch werden Best Practices für diese häufige Aufgabe in SQL Server beschrieben.
SQL-Injection verhindern:
Die direkte Verkettung von Benutzereingaben in SQL-Abfragen ist eine große Sicherheitslücke. Dies öffnet die Tür für SQL-Injection-Angriffe.
Einsatz der Parametrisierung:
Parametrierte Abfragen sind der Grundstein für die sichere Parameterübergabe. Durch die Verwendung von Platzhaltern (z. B. ?
) wird verhindert, dass böswillige Eingaben als SQL-Code interpretiert werden. Das Datenbanksystem übernimmt das ordnungsgemäße Escapen.
Dynamische Tabellennamenauflösung:
Dynamisches SQL ermöglicht in Kombination mit einer ordnungsgemäßen Validierung das sichere Abrufen von Tabellennamen. Hier ist ein Beispiel:
<code class="language-sql">CREATE PROC spCountAnyTableRows (@PassedTableName VARCHAR(255)) AS BEGIN DECLARE @ActualTableName VARCHAR(255); SELECT @ActualTableName = QUOTENAME(TABLE_NAME) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = @PassedTableName; DECLARE @SQL NVARCHAR(MAX); SET @SQL = N'SELECT COUNT(*) FROM ' + @ActualTableName + N';'; EXEC sp_executesql @SQL; END;</code>
Dieser Ansatz überprüft, ob der Tabellenname vorhanden ist, bevor die Abfrage erstellt und ausgeführt wird, wodurch das Injektionsrisiko minimiert wird.
Wichtige Überlegungen:
QUOTENAME
ist entscheidend für das Escapezeichen von Sonderzeichen, stellt jedoch keine vollständige Sicherheitslösung für sich dar. Kombinieren Sie es immer mit Überprüfungen der Tabellenexistenz.Das obige ist der detaillierte Inhalt vonWie kann ich einen Tabellennamen sicher als Parameter an eine gespeicherte SQL Server-Prozedur übergeben?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!