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

4.3 KiB

3.5 Datenbankmanagement

Benutzerverwaltung

Benutzer erstellen

-- MySQL/MariaDB
CREATE USER 'benutzer'@'localhost' IDENTIFIED BY 'passwort';

-- PostgreSQL
CREATE USER benutzer WITH PASSWORD 'passwort';

Rechte vergeben (GRANT)

-- 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)

REVOKE INSERT ON datenbank.tabelle FROM 'benutzer'@'localhost';

Rollen (PostgreSQL)

-- 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

-- Transaktion starten (implizit bei vielen DBMS)
START TRANSACTION;

-- Änderungen speichern
COMMIT;

-- Änderungen zurücknehmen
ROLLBACK;

-- Sicherungspunkt setzen
SAVEPOINT speicherpunkt1;

Beispiel: Überweisung

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

# 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

# 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.

-- 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

-- 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

-- 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

-- 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


Stand: 2024