Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Nächste Überarbeitung
Vorhergehende Überarbeitung
modul:m290_guko:learningunits:lu12:theorie:b_user_erstellen [2025/11/11 23:56] – angelegt gkochmodul:m290_guko:learningunits:lu12:theorie:b_user_erstellen [2025/11/12 00:16] (aktuell) gkoch
Zeile 1: Zeile 1:
-====== 1) CREATE USER – Benutzer anlegen (MySQL 9.4) ======  {#lu12a:create_user}+====== LU12b - Benutzer-Lebenszyklus: CREATE USER & DROP USER ======
  
 <WRAP round 80% box center> <WRAP round 80% box center>
-**Ziel:** Einen Benutzer mit Passwort anlegen. Standardmässig hat ein neuer Benutzer **keine** Rechte.  +**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) 
 +</WRAP> 
 + 
 +===== 0) Setup: Beispiel-DB ''wttw'' anlegen (einmalig als root) ===== 
 +<WRAP round 80% box> 
 +<code sql> 
 +-- 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'); 
 +</code> 
 +</WRAP> 
 + 
 +===== 1) CREATE USER – Benutzer anlegen ===== 
 +<WRAP round 80% box center>
 **Syntax:**   **Syntax:**  
-<code sql>CREATE USER [IF NOT EXISTS] 'user'@'host' IDENTIFIED BY 'Passw0rd!';</code>+<code sql>CREATE USER [IF NOT EXISTS] 'user'@'host' IDENTIFIED BY 'Str0ng!Pass';</code>
 </WRAP> </WRAP>
  
-==== Host verstehen ====+==== Host verstehen (''user'@'host''====
 <WRAP round 80% box> <WRAP round 80% box>
-* '''alice'@'localhost''' → Login nur vom selben Rechner.   +  * '''name'@'localhost''' → Login **nur** vom gleichen Rechner (Unterrichts-Standard).   
-* '''alice'@'%''' → Login von **jedem** Host (nur wenn unbedingt nötig!).   +  * '''name'@'192.168.1.%''' → nur aus dem internen Netz.   
-Host kann auch eine IP/Range sein: '''alice'@'192.168.1.%'''.+  * '''name'@'%' ''' → von **überall** (nur wenn zwingend nötig – Sicherheitsrisiko!).
 </WRAP> </WRAP>
  
-==== Schritt-für-Schritt ====+==== Praxis: DB-Benutzer für WP-Szenario ====
 <WRAP round 80% box> <WRAP round 80% box>
-**1. Als root verbinden** (WebStorm SQL-Konsole)   
-**2. Benutzer anlegen** 
 <code sql> <code sql>
-CREATE USER IF NOT EXISTS 'bob'@'localhost' IDENTIFIED BY 'Secure1pass!'; +-- als root anlegen: 
-</code>+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!';
  
-**3. Benutzerliste (kurz)** +-- Sichtprüfung
-<code sql>+
 SELECT user, host FROM mysql.user ORDER BY user, host; SELECT user, host FROM mysql.user ORDER BY user, host;
 </code> </code>
 +</WRAP>
  
-**4Testlogin in zweiter Verbindung** (als ''bob''):+<WRAP tip round 80% center> 
 +**Wichtig:** Ein neu angelegter Benutzer hat **keine** Rechte  
 +Rechte/Rollen vergeben wir auf Seite [[lu12:wttw_rights|2) Rechte & Rollen]] mit **GRANT**. 
 +</WRAP> 
 + 
 +===== 2) DROP USER – Benutzer entfernen ===== 
 +<WRAP round 80% box center> 
 +**Syntax:** <code sql>DROP USER [IF EXISTS] 'user'@'host'[, ...];</code>   
 +Entfernt den Benutzer **und** seine Grants. 
 +</WRAP> 
 + 
 +==== Beispiele ==== 
 +<WRAP round 80% box>
 <code sql> <code sql>
--- Verfügbar ohne Rechte+-- Übungs-Account nicht mehr benötigt
-SHOW DATABASES;+DROP USER IF EXISTS 'demo_temp'@'localhost'; 
 + 
 +-- mehrere auf einmal 
 +DROP USER 'alt_redakteur'@'localhost', 'legacy_integration'@'%';
 </code> </code>
-Erwartung: nur ''information_schema'' / ''performance_schema'' sichtbar. 
 </WRAP> </WRAP>
  
-<WRAP tip round 80% center+==== Aktive Verbindungen zuerst trennen (falls nötig) ==== 
-**Wichtig:** Rechte folgen im nächsten Schritt mit [[lu12a:grant|GRANT]].+<WRAP round 80% box
 +<code sql> 
 +-- wer ist verbunden? 
 +SHOW PROCESSLIST; 
 + 
 +-- zB. Prozess 21 beenden und dann löschen 
 +KILL 21; 
 +DROP USER 'legacy_integration'@'%'; 
 +</code>
 </WRAP> </WRAP>
  
  • modul/m290_guko/learningunits/lu12/theorie/b_user_erstellen.1762901779.txt.gz
  • Zuletzt geändert: 2025/11/11 23:56
  • von gkoch