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 MertenAdmins (Website-Admin, nicht Super-Admin)
  • Shaolin TranRedakteur (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 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'@'%';