246 lines
4.3 KiB
Markdown
246 lines
4.3 KiB
Markdown
# 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*
|