diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 5612635..1177c14 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -229,9 +229,10 @@ }, "active": "25f5b25d5eca7203", "lastOpenFiles": [ - "SS2026/Datenbanken und Informationssysteme/SQL/DQL Data Query Language SQL.md", + "SS2026/Datenbanken und Informationssysteme/SQL/TCL Transaction Control Language SQL.md", "SS2026/Datenbanken und Informationssysteme/SQL/Anhänge/sql_merged.pdf", "SS2026/Datenbanken und Informationssysteme/SQL/SQL.md", + "SS2026/Datenbanken und Informationssysteme/SQL/DQL Data Query Language SQL.md", "SS2026/Datenbanken und Informationssysteme/SQL/Unbenannt.md", "SS2026/Datenbanken und Informationssysteme/SQL/DML Data Manipulation Language SQL.md", "SS2026/Datenbanken und Informationssysteme/SQL/DDL Data Definition Language SQL.md", diff --git a/SS2026/Datenbanken und Informationssysteme/SQL/SQL.md b/SS2026/Datenbanken und Informationssysteme/SQL/SQL.md index fee601b..fa64965 100644 --- a/SS2026/Datenbanken und Informationssysteme/SQL/SQL.md +++ b/SS2026/Datenbanken und Informationssysteme/SQL/SQL.md @@ -52,7 +52,51 @@ Gruppiert Zeilen basierend auf Werten einer oder mehrerer Spalten ### HAVING -Filtert Abfragen mit Aggregatfunktion oder Group by +Filtert Abfragen mit Aggregatfunktion UND Group By `SELECT Spalte1, COUNT(*) FROM Tabelle GROUP BY Spalte1 HAVING COUNT(*) > 5;` +## ORDER BY +Sortiert Ergebnisse +`SELECT Spalte1, Spalte2 FROM Tabelle ORDER BY Spalte1 ASC, Spalte2 DESC` + + +## LIMIT OFFSET FETCH + +LIMIT < n > um max n Zeilen auszugeben +OFFSET < n > überspringe n Zeilen am Anfang +OFFSET FETCH Bsp.: +`SELECT Spalte1 FROM Tabelle ORDER BY Spalte OFFSET n ROWS FETCH NEXT m ROWS ONLY` + + + +## SQL-INJECTIONS + +SQL Code in Eingabefelder einfügen. +Nur wenn eingaben nicht überprüft / gereinigt werden! + +Um SQL-Injection-Angriffe zu verhindern, sollten Sie folgende Sicherheitsmaßnahmen ergreifen: +1. Benutzereingaben validieren: Validieren Sie alle Benutzereingaben, um sicherzustellen, dass sie den erwarteten Datentyp und Format aufweisen. +2. Parameterisierte Abfragen verwenden: Verwenden Sie Prepared Statements oder Parameterized Queries, um sicherzustellen, dass Benutzereingaben nicht als Teil des SQL-Codes interpretiert werden. +3. Stored Procedures nutzen: Verwenden Sie Stored Procedures, um den Zugriff auf die Datenbank zu kontrollieren und den Umfang der möglichen Angriffe zu reduzieren. +4. Least Privilege Prinzip anwenden: Gewähren Sie Ihrer Anwendung nur die minimalen Berechtigungen, die sie benötigt, um auf die Datenbank zuzugreifen. +5. Escaping von Eingaben: Wenn die Verwendung von Parameterized Queries oder Stored Procedures nicht möglich ist, stellen Sie sicher, dass Benutzereingaben korrekt "escaped" werden, um schädliche Zeichen zu neutralisieren. + + + + +## SQL Transaction Control Language TCL +1. BEGIN TRANSACTION +2. COMMIT +3. ROLLBACK +4. SAVEPOINT + +[[TCL Transaction Control Language SQL]] + + +## SQL Data Control Language DCL + +1. GRANT +2. REVOKE + +### GRANT diff --git a/SS2026/Datenbanken und Informationssysteme/SQL/TCL Transaction Control Language SQL.md b/SS2026/Datenbanken und Informationssysteme/SQL/TCL Transaction Control Language SQL.md new file mode 100644 index 0000000..b885327 --- /dev/null +++ b/SS2026/Datenbanken und Informationssysteme/SQL/TCL Transaction Control Language SQL.md @@ -0,0 +1,16 @@ +### BEGIN TRANSACTION +Beginnt neue Transaktion +`BEGIN TRANSACTION;` + +### COMMIT +Änderungen dauerhaft speichern +`COMMIT;` + +### ROLLBACK +Änderungen rückgängig machen +`ROLLBACK;` + +### SAVEPOINT +Zwischenzustand erstellen +`SAVEPOINT savepoint_name` +`ROLLBACK TO savepoint_name` \ No newline at end of file