====== LU12b - Benutzer-Lebenszyklus: CREATE USER & DROP USER ====== **Ziel:** Wir legen **Benutzer** für die Beispiel-DB **''wttw''** (wetraveltheworld) an, verstehen **Host-Bindung** (''user'@'host'') und löschen Benutzer sauber wieder. Wir nutzen folgende Personen/Rollenannahmen: * **Caro Steig** & **Martin Merten** ≈ **Admins** (Website-Admin, **nicht** Super-Admin) * **Shaolin Tran** ≈ **Redakteur** (Editor) ===== 0) Setup: Beispiel-DB ''wttw'' anlegen (einmalig als root) ===== -- als root CREATE DATABASE IF NOT EXISTS wttw; USE wttw; -- Minimaler WP-ähnlicher Ausschnitt für die Übung: CREATE TABLE IF NOT EXISTS users ( user_id INT PRIMARY KEY AUTO_INCREMENT, display_name VARCHAR(100) NOT NULL, email VARCHAR(190) NOT NULL UNIQUE ); CREATE TABLE IF NOT EXISTS posts ( post_id INT PRIMARY KEY AUTO_INCREMENT, author_id INT NOT NULL, title VARCHAR(255) NOT NULL, status ENUM('draft','published','trash') NOT NULL DEFAULT 'draft', published_at DATETIME NULL, CONSTRAINT fk_posts_author FOREIGN KEY (author_id) REFERENCES users(user_id) ); CREATE TABLE IF NOT EXISTS comments ( comment_id INT PRIMARY KEY AUTO_INCREMENT, post_id INT NOT NULL, author VARCHAR(100) NOT NULL, body TEXT NOT NULL, created_at DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT fk_comments_post FOREIGN KEY (post_id) REFERENCES posts(post_id) ); INSERT INTO users(display_name,email) VALUES ('Caro Steig','caro@wetraveltheworld.de'), ('Martin Merten','martin@wetraveltheworld.de'), ('Shaolin Tran','shaolin@wetraveltheworld.de'); ===== 1) CREATE USER – Benutzer anlegen ===== **Syntax:** CREATE USER [IF NOT EXISTS] 'user'@'host' IDENTIFIED BY 'Str0ng!Pass'; ==== Host verstehen (''user'@'host'') ==== * '''name'@'localhost''' → Login **nur** vom gleichen Rechner (Unterrichts-Standard). * '''name'@'192.168.1.%''' → nur aus dem internen Netz. * '''name'@'%' ''' → von **überall** (nur wenn zwingend nötig – Sicherheitsrisiko!). ==== Praxis: DB-Benutzer für WP-Szenario ==== -- als root anlegen: CREATE USER IF NOT EXISTS 'caro_admin'@'localhost' IDENTIFIED BY 'Secure$Caro!'; CREATE USER IF NOT EXISTS 'martin_admin'@'localhost' IDENTIFIED BY 'Secure$Martin!'; CREATE USER IF NOT EXISTS 'tran_editor'@'localhost' IDENTIFIED BY 'Secure$Tran!'; -- optional: App/Integration-User (minimal) CREATE USER IF NOT EXISTS 'wp_api'@'localhost' IDENTIFIED BY 'Secure$Api!'; -- Sichtprüfung SELECT user, host FROM mysql.user ORDER BY user, host; **Wichtig:** Ein neu angelegter Benutzer hat **keine** Rechte. Rechte/Rollen vergeben wir auf Seite [[lu12:wttw_rights|2) Rechte & Rollen]] mit **GRANT**. ===== 2) DROP USER – Benutzer entfernen ===== **Syntax:** DROP USER [IF EXISTS] 'user'@'host'[, ...]; Entfernt den Benutzer **und** seine Grants. ==== Beispiele ==== -- Übungs-Account nicht mehr benötigt: DROP USER IF EXISTS 'demo_temp'@'localhost'; -- mehrere auf einmal DROP USER 'alt_redakteur'@'localhost', 'legacy_integration'@'%'; ==== Aktive Verbindungen zuerst trennen (falls nötig) ==== -- wer ist verbunden? SHOW PROCESSLIST; -- z. B. Prozess 21 beenden und dann löschen KILL 21; DROP USER 'legacy_integration'@'%';