Grundlagen der Programmierung: Datenbanken

Vorgefertigte Prozeduren

LinkedIn Learning kostenlos und unverbindlich testen!

Jetzt testen Alle Abonnements anzeigen
Komplexe Abfragen können in SQL in vorgefertigten Prozeduren zusammengefasst und bei Bedarf mit Parametern versehen werden. Zusätzlich wird dadurch die Sicherheit einer Datenbank wesentlich erhöht.

Transkript

Sie kennen jetzt eine Reihe von SQL-Möglichkeiten, die auch teilweise sehr sehr komplex sein können mit mehreren Tabellen und Abfragen und so weiter. Ich möchte Ihn mal zeigen, wie Sie solche komplexen Abfragen auch zusammenfassen können in sogenannte Vorgefertigte Prozeduren. Einerseits ist es einfacher und anderseits ist es sogar ein Möglichkeit, um sich gegen Angriffe von außen zu wappnen. Aber der Reihe nach. Schauen wir uns mal an was Vorgefertigte Prozeduren oder auf englisch stored procedures eigentlich sind. Normalerweise haben Sie so eine Abfrage, die heißt SELECT*FROM Employee, WHERE Salary50000, ORDER BY LastName, Das heißt, ich bekomm hier eine Liste von allen Mitarbeiterinnen und Mitarbeitern, die mehr als $50000 verdienen. Jetzt ist es eine ziemlich einfache Abfrage, es geht hier nur um Beispiel, aber stellen Sie sich vor das ist komplizierter mit verschiedenen Tabellen und so weiter. Jetzt kann ich diese Abfrage zusammenfassen in einer Prozedur mit CREATE PROCEDURE. Ich gebe dieser Prozedur einen Namen und sage in den Fall HighlyPaid und immer dann, wenn ich in Zukunft CALL HighlyPaid () schreibe, dann bekomm ich automatisch diese Abfrage. Das ist eine schöne Möglichkeit um komplizierte Abfragen zu kapseln, so ähnlich wie wir das bei andren Programmiersprachen auch mit Funktionen kennen, das heißt, ich rufe einfach nur den Namen der Funktionen auf, in den Fall der Prozedur und dann wird dieser Prozedur, wenn sein muss auch mehrmals hintereinander ausgeführt. Ähnlich wie bei Funktionen gibt es diese Prozeduren auch mit Parametern. Schauen wir uns das Ganze jetzt mal an. Ich habe hier wieder meine Select-Abfrage und außenrum schreibe ich jetzt ein CREATE PROCEDURE EmployeesInDept und jetzt sage ich, wenn ich diese Prozedur aufrufe, dann möchte ich den Namen einer bestimmten Abteilung übergeben. Das soll maximal 50 Zeichen lang sein, das Ganze nenne ich dann Dept für Department und ich verändere dann WHERE Department=dept, also übergebe hier einfach nur den Inhalt der Funktion. Aufrufen kann ich diese Funktion dann sowie ich das bei anderen Funktionen, in anderen Programmiersprachen auch mache mit CALL EmployeesInDept('Accounting') und so kann ich mir dann mit einem ganz einfachen, leicht zu merkenden Befehl die Nachnamen und die Vornamen von allen Mitarbeitern in verschiedenen Abteilung mir anzeigen lassen. Eine schöne Möglichkeit um komplizierte Abfragen irgendwie zu kapseln. Neben diesen Vorteil der Kapselung, gibt es aber noch ganz anderen Vorteil und den möchte ich jetzt mal zeigen, und zwar können Sie sich dadurch gegen SQL Injection wehren. Folgendes Szenario: Sie haben eine Webseite da kann dann eine Kunde seine Kundennummer eingeben und dann gibt er hier ABC551 ein, klickt auf Senden und Ihr Datenbanksystem macht dann folgendes: Es sagt SELECT*FROM Orders WHERE CustomerID und hier wird dann einfach der Wert dieser Textbox eingefügt. Und daraus wird in diesem Beispiel dann eben WHERE CustomerID=ABC551. Das ist mein sqlString und der wird dann ausgeführt und die Datenbank schaut dann eben nach, wer hat den diese Kundennummer. Soweit ist alles in Ordnung, das war ein lieber Kunde, der hat nichts falsch gemacht, er hat nichts böswillig gemacht. Aber was passiert, wenn jemand als Kundennummer folgendes eingibt: x';SELECT*FROM Users;-- . Das ist tatsächlich keine gültige Kundennummer, aber das weiß das System ja noch nicht, das heißt es kommt folgendes an: SELECT*FROM Orders und das sieht dann so aus und wenn man das jetzt der Reihe nach durchgehen, haben wir hier eine SELECT*FROM Orders WHERE CustomerID=x. Mit Strichpunkt wird das erste Statement abgeschlossen, dann folgt ein neues Statement SELECT*FROM Users; , mit -- fange ich einen Kommentar an. Und wenn ich diesen String ausführe, dann macht die Datenbank folgendes: Zunächst einmal werden alle Orders mit einer CustomerID von x ausgesucht, da wird nichts gefunden. Im zweiten Schritt werden alle Nutzer angezeigt mit diesen -- da kommentiere ich einfach nur die letzen " aus. Da haben wir schon ein gehöriges Problem, weil dann plötzlich jemand zugriff auf unsere Nutzerdatenbank bekommt. Etwas gefährlicher wird es, wenn jemand folgendes eingibt: bei Kundennummer einfach sagt, hey, x':DROP TABLE Orders;- -. Auch das wird von unseren Datenbanksystem der Reihe nach abgearbeitet und Sie können sich vorstellen, wenn ich das Ganze hier dann ausführe was passiert, SELECT*FROM Orders und dann DROP TABLE Orders und damit hat sich die Sache erledigt. Das heißt, solche stored procedures, solche Vorgefertigten Prozeduren sind auch eine Möglichkeit, um sich gegen solch eine SQL-Injection zu wehren, weil in einer stored procedures nicht verschiedne Abfragen gebündelt werden können, sondern immer nur eine Abfrage drin sein kann und dann würde eben diese Aufteilung von einem Select-Befehl in verschiedene Select- und Drop- Befehle gar nicht möglich sein.

Grundlagen der Programmierung: Datenbanken

Fangen Sie ganz von vorne an und erfahren Sie alles über die Grundlagen zu Datenbanken und deren Einsatzzwecke, um danach eigene Lösungen und Anwendungen zu entwickeln.

3 Std. 6 min (39 Videos)
Derzeit sind keine Feedbacks vorhanden...

Dieser Online-Kurs ist als Download und als Streaming-Video verfügbar. Die gute Nachricht: Sie müssen sich nicht entscheiden - sobald Sie das Training erwerben, erhalten Sie Zugang zu beiden Optionen!

Der Download ermöglicht Ihnen die Offline-Nutzung des Trainings und bietet die Vorteile einer benutzerfreundlichen Abspielumgebung. Wenn Sie an verschiedenen Computern arbeiten, oder nicht den ganzen Kurs auf einmal herunterladen möchten, loggen Sie sich auf dieser Seite ein, um alle Videos des Trainings als Streaming-Video anzusehen.

Wir hoffen, dass Sie viel Freude und Erfolg mit diesem Video-Training haben werden. Falls Sie irgendwelche Fragen haben, zögern Sie nicht uns zu kontaktieren!