Files
ihk-ausbildung/1-Ausbildungsjahr/LF3-Datenbanken/LF3-05-Datenbankmanagement.md

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*