Initial commit: IHK Ausbildung materials
This commit is contained in:
245
1-Ausbildungsjahr/LF3-Datenbanken/LF3-05-Datenbankmanagement.md
Normal file
245
1-Ausbildungsjahr/LF3-Datenbanken/LF3-05-Datenbankmanagement.md
Normal file
@@ -0,0 +1,245 @@
|
||||
# 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*
|
||||
Reference in New Issue
Block a user