SQL Stored Procedures: Unterschied zwischen den Versionen
KKeine Bearbeitungszusammenfassung |
|||
Zeile 51: | Zeile 51: | ||
Stored Procedures bieten einen gewissen Schutz vor SQL-Injections, da sie Parameter/Daten und Anfragen getrennt voneinander behandeln können. So werden Parameter immer ausschließlich als Daten behandelt und nicht als Anfrage. | Stored Procedures bieten einen gewissen Schutz vor SQL-Injections, da sie Parameter/Daten und Anfragen getrennt voneinander behandeln können. So werden Parameter immer ausschließlich als Daten behandelt und nicht als Anfrage. | ||
Allerdings ist dies kein absoluter Schutz, auch Stored Procedures können, unter gewissen Bedingungen, Angriffsflächen für SQL-Injections bieten. Beispielsweise wenn der Code in der Procedure dynamisch durch | Allerdings ist dies kein absoluter Schutz, auch Stored Procedures können, unter gewissen Bedingungen, Angriffsflächen für SQL-Injections bieten. Beispielsweise wenn der Code in der Procedure dynamisch durch konkatenierte Parameter aufgebaut ist. | ||
Version vom 24. Februar 2022, 10:48 Uhr
Unter einer Stored Procedure versteht man ein Stück gespeicherten SQL-Code der immer wieder ausführbar ist. Ähnlich wie Funktionen kann man SQL Stored Procedures individuell anlegen und speichern, mit Parametern versehen, alternativ auch etwas zurückgeben lassen und anhand des Namens aufrufen. Es bietet sich also an, Code den man häufig ausführt als Stored Procedure zu speichern.
Beispiel Syntax (MSSQL):
Anlegen einer Stored Procedure:
CREATE PROCEDURE
SelectAllStudentsAS
SELECT * FROM
StudentenGO;
Aufrufen dieser Stored Procedure:
EXEC
SelectAllStudents;
Anlegen einer Stored Procedure mit Parametern:
CREATE PROCEDURE
SelectAllStudents @Gruppe nvarchar(30), @Semester nvarchar(2)AS
SELECT * FROM
StudentenWHERE
Gruppe = @GruppeAND
Semester = @SemesterGO;
Aufruf:
EXEC
SelectAllStudents @Gruppe = 'München', @Semester = '5';
Warum Stored Procedures und nicht Funktionen?
Stored Procedures und Funktionen sind in ihrer Funktion sehr ähnlich. Die Stored Procedures sind allerdings flexibler und benötigen weniger Code als Funktionen, da weder “BEGIN” und “END”, noch “RETURN” notwendig sind solange der Code nur eine Zeile lang ist. Auch erlauben Stored Procedures mehrere Parameter, während Funktionen immer nur eine Variable oder Tabelle zurückgeben können. Es ist nicht möglich in einer Funktion eine Procedure aufzurufen, umgekehrt ist es aber möglich, eine Funktion in einer Procedure aufzurufen.
Vorteile von Stored Procedures:
- Da Stored Procedures in der Datenbank gespeichert werden ist es ohne großen Aufwand möglich mittels “ALTER PROCEDURE” den Code der Procedure zu verändern ohne dass ein Neustart nötig ist.
- Stored Procedures ermöglichen eine große Zeitersparnis indem häufig genutzter Code nicht jedes Mal neu eingegeben werden muss und da Statements in der Regel vorkompiliert sind, wird auch Laufzeit gespart.
- Es ist möglich Stored Procedures zu verschlüsseln, so dass der Inhalt nicht sichtbar ist. Wird der Zugriff auf die Tabelle nur über Procedures gestattet erhöht dies die Sicherheit vor unbefugtem Verändern der Daten.
- Bessere Übersichtlichkeit des Codes durch zentral gehaltene und wiederverwendbare Procedures.
Stored Procedures als Schutz vor SQL-Injections
Stored Procedures bieten einen gewissen Schutz vor SQL-Injections, da sie Parameter/Daten und Anfragen getrennt voneinander behandeln können. So werden Parameter immer ausschließlich als Daten behandelt und nicht als Anfrage. Allerdings ist dies kein absoluter Schutz, auch Stored Procedures können, unter gewissen Bedingungen, Angriffsflächen für SQL-Injections bieten. Beispielsweise wenn der Code in der Procedure dynamisch durch konkatenierte Parameter aufgebaut ist.
Quellen
https://www.w3schools.com/sql/sql_stored_procedures.asp
https://www.sqlshack.com/sql-server-stored-procedures-for-beginners/
YouTube:
“Advanced SQL Tutorial | Stored Procedures + Use Cases” von “Alex The Analyst” (https://www.youtube.com/watch?v=NrBJmtD0kEw)
“SQL Stored Procedures - What They Are, Best Practices, Security, and More…” von “IamTimCorey” (https://www.youtube.com/watch?v=Sggdhot-MoM)