====== 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'@'%';