# 3.5 Datenbankmanagement ## Benutzerverwaltung ### Benutzer erstellen ```sql -- MySQL/MariaDB CREATE USER 'benutzer'@'localhost' IDENTIFIED BY 'passwort'; -- PostgreSQL CREATE USER benutzer WITH PASSWORD 'passwort'; ``` ### Rechte vergeben (GRANT) ```sql -- Alle Rechte auf eine Datenbank GRANT ALL PRIVILEGES ON datenbank.* TO 'benutzer'@'localhost'; -- Nur Leserechte GRANT SELECT ON datenbank.tabelle TO 'benutzer'@'localhost'; -- Mehrere Rechte GRANT SELECT, INSERT, UPDATE ON datenbank.tabelle TO 'benutzer'@'localhost'; ``` ### Rechte entziehen (REVOKE) ```sql REVOKE INSERT ON datenbank.tabelle FROM 'benutzer'@'localhost'; ``` ### Rollen (PostgreSQL) ```sql -- Rolle erstellen CREATE ROLE leser; -- Rechte zuweisen GRANT SELECT ON tabelle TO leser; -- Rolle zu Benutzer GRANT leser TO benutzer; ``` --- ## Transaktionen Transaktionen garantieren die **ACID-Eigenschaften**. ``` ACID - Eigenschaften ├── Atomicity (Atomarität) ├── Consistency (Konsistenz) ├── Isolation (Isolierung) └── Durability (Dauerhaftigkeit) ``` ### Transaktionssteuerung ```sql -- Transaktion starten (implizit bei vielen DBMS) START TRANSACTION; -- Änderungen speichern COMMIT; -- Änderungen zurücknehmen ROLLBACK; -- Sicherungspunkt setzen SAVEPOINT speicherpunkt1; ``` ### Beispiel: Überweisung ```sql START TRANSaktion; -- Geld abbuchen UPDATE Konto SET Kontostand = Kontostand - 100 WHERE Konto_ID = 1; -- Geld gutschreiben UPDATE Konto SET Kontostand = Kontostand + 100 WHERE Konto_ID = 2; -- Wenn alles OK, speichern COMMIT; -- Bei Fehler: alles zurücksetzen ROLLBACK; ``` --- ## Datensicherung (Backup) ### Backup-Typen | Typ | Beschreibung | |-----|-------------| | Vollbackup | Alle Daten sichern | | Inkrementell | Nur Änderungen seit letztem Backup | | Differentiell | Änderungen seit Vollbackup | ### MySQL/MariaDB ```bash # Vollbackup mysqldump -u root -p datenbank > backup.sql # Mehrere Datenbanken mysqldump -u root -p --databases db1 db2 > backup.sql # Wiederherstellen mysql -u root -p datenbank < backup.sql ``` ### PostgreSQL ```bash # Vollbackup pg_dump -U benutzer datenbank > backup.sql # Wiederherstellen psql -U benutzer datenbank < backup.sql ``` ### Backup-Strategie ``` Backup-Plan ├── Täglich: Inkrementelles Backup ├── Wöchentlich: Vollbackup ├── Monatlich: Archivierung └── Offsite: Externe Speicherung ``` --- ## Datenbankoptimierung ### Indizes Indizes beschleunigen den Zugriff auf Daten. ```sql -- Index erstellen CREATE INDEX idx_name ON tabelle (spalte); -- Zusammengesetzter Index CREATE INDEX idx_name ON tabelle (spalte1, spalte2); -- Eindeutiger Index CREATE UNIQUE INDEX idx_email ON tabelle (email); -- Index löschen DROP INDEX idx_name ON tabelle; ``` ### EXPLAIN - Abfrage analysieren ```sql -- Ausführungsplan anzeigen EXPLAIN SELECT * FROM tabelle WHERE spalte = 'wert'; -- MySQL EXPLAIN FORMAT=JSON SELECT * FROM tabelle WHERE spalte = 'wert'; ``` ### Optimierungstipps | Tipp | Beschreibung | |------|-------------| | INDEX verwenden | Für WHERE-Joins und -Spalten | | SELECT * vermeiden | Nur benötigte Spalten | | JOINs minimieren | Nicht mehr als nötig | | Wildcards vermeiden | `LIKE '%wert'` ist langsam | --- ## Datensicherheit ### SQL Injection verhindern ```sql -- NICHT SO: Direkte Eingabe SELECT * FROM benutzer WHERE name = '" + eingabe + "' -- BESSER: Prepared Statements PREPARE stmt FROM 'SELECT * FROM benutzer WHERE name = ?'; SET @name = eingabe; EXECUTE stmt USING @name; ``` ### Verschlüsselung ``` Verschlüsselungsebenen ├── Transport Layer Security (TLS) ├── Transparent Data Encryption (TDE) └── Spaltenweise Verschlüsselung ``` --- ## Monitoring ### MySQL/MariaDB ```sql -- Aktuelle Verbindungen SHOW PROCESSLIST; -- Statusvariablen SHOW STATUS LIKE 'Connections'; SHOW STATUS LIKE 'Threads%'; -- Langsame Abfragen SHOW VARIABLES LIKE 'slow_query_log'; ``` ### Wichtige Metriken | Metrik | Beschreibung | |--------|-------------| | Connection Usage | Aktive Verbindungen | | Query Cache | Cache-Trefferquote | | Lock Waits | Warteschlangen | | Buffer Pool | Speicherauslastung | --- ## Querverweise - [[LF3-04-SQL-Abfragen|Zurück: SQL-Abfragen]] - [[LF4-IT-Sicherheit|Sicherheit: Zugriffskontrolle]] - [[Wissen/Wirtschafts-Sozialkunde/WISO-Zusammenfassung|WISO: Datenschutz]] --- *Stand: 2024*