Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

modul:m290_guko:learningunits:lu12:theorie:c_rechte_vergeben [2025/11/12 00:00] – angelegt gkochmodul:m290_guko:learningunits:lu12:theorie:c_rechte_vergeben [2025/11/12 00:19] (aktuell) gkoch
Zeile 1: Zeile 1:
-====== LU12c - GRANT: Rechte vergeben ======+====== LU12c - Rechte & Rollen: vergeben, anzeigen, entziehen ======
  
 <WRAP round 80% box center> <WRAP round 80% box center>
-**Grundform:**   +**Ziel:** Mit **GRANT** Rechte auf passenden Ebenen vergebenmit **SHOW GRANTS** prüfen, mit **REVOKE** entziehen  
-<code sql>GRANT privileg[, ...] ON privileg_level TO 'user'@'host';</code>+Wir bilden WordPress-Rollen **sinngemäss** auf **MySQL-Rollen** ab:
 </WRAP> </WRAP>
  
-==== Privileg-Level (Scope) ==== 
 <WRAP round 80% box> <WRAP round 80% box>
-Level Schreibweise Wirkung +WP-Rolle (App) Sinnbild DB-Rolle (MySQL) Typische DB-Rechte (Beispiel) 
-| **Global** | ''*.*'' | Serverweit (alle Datenbanken) +| **Administrator** | ''wp_admin''**ALL PRIVILEGES** auf ''wttw.*''
-| **Datenbank** | ''db.*''Für alle Tabellen in ''db'' +| **Redakteur (Editor)** | ''wp_editor'' | ''SELECT, INSERT, UPDATE, DELETE'' auf **Inhaltstabellen** (''posts, comments''), ''SELECT'' auf ''users''
-**Tabelle** ''db.tbl'' | Nur diese Tabelle +| **Autor** | ''wp_author'' | ''SELECT, INSERT, UPDATE'' auf ''posts'' **eigener Inhalte** (fachlich; DB-seitig vereinfachen wir), ''SELECT, INSERT'' auf ''comments'', ''SELECT'' auf ''users''
-| **Spalte** | ''tbl(spalte)'' | Nur bestimmte Spalten +| **Leser/Integration** | ''wp_read''''SELECT'' auf ''wttw.*'' |
-| **Routine** | ''PROCEDURE/FUNCTION''Ausführen von Routinen |+
 </WRAP> </WRAP>
  
-==== BeispielDatenbank + Rechte für Benutzer ====+<WRAP round 80% box center> 
 +**Hinweis:** „Eigene Inhalte“ lässt sich **fachlich** (App-Logik) sauber lösen; auf reiner DB-Ebene bräuchte es z. B. **Row-Level-Security** oder Trigger. Für die Übung vereinfachen wir auf Tabellen-Ebene. 
 +</WRAP> 
 + 
 +===== 0) Ebenen-Überblick ===== 
 +<WRAP round 80% box> 
 +^ Ebene ^ Schreibweise ^ Wirkung (Beispiel) ^ 
 +| **Datenbank** | ''wttw.*'' | alle Tabellen in ''wttw''
 +| **Tabelle** | ''wttw.posts'' | nur diese Tabelle | 
 +| **Spalte** | ''users(email)'' | nur bestimmte Spalte(n) | 
 +</WRAP> 
 + 
 +===== 1) Rollen anlegen & berechtigen (einmalig als root) =====
 <WRAP round 80% box> <WRAP round 80% box>
-**1. DB & Tabelle anlegen (root)** 
 <code sql> <code sql>
-CREATE DATABASE IF NOT EXISTS bobdb+-- Rollen 
-USE bobdb+CREATE ROLE IF NOT EXISTS wp_admin, wp_editor, wp_author, wp_read
-CREATE TABLE IF NOT EXISTS todos( + 
-  id INT AUTO_INCREMENT PRIMARY KEY+-- Rechte an Rollen vergeben 
-  title VARCHAR(255) NOT NULL+GRANT ALL PRIVILEGES                ON wttw.*        TO wp_admin
-  completed BOOL DEFAULT FALSE + 
-);+GRANT SELECT                        ON wttw.users    TO wp_editorwp_author; 
 +GRANT SELECTINSERT, UPDATE, DELETE ON wttw.posts   TO wp_editor; 
 +GRANT SELECT, INSERT, UPDATE        ON wttw.posts    TO wp_author; 
 + 
 +GRANT SELECT, INSERT, DELETE        ON wttw.comments TO wp_editor; 
 +GRANT SELECT, INSERT                ON wttw.comments TO wp_author; 
 + 
 +GRANT SELECT                        ON wttw.*        TO wp_read;
 </code> </code>
 +</WRAP>
  
-**2. Rechte vergeben (root)**   +===== 2) Rollen Benutzern zuweisen & Standardrollen setzen ===== 
-//Alle Rechte auf **diese** DB an ''bob'' vergeben://+<WRAP round 80% box>
 <code sql> <code sql>
-GRANT ALL PRIVILEGES ON bobdb.* TO 'bob'@'localhost';+-- Benutzer aus Seite 1: 
 +-- 'caro_admin'@'localhost', 'martin_admin'@'localhost', 'tran_editor'@'localhost', 'wp_api'@'localhost' 
 + 
 +GRANT wp_admin  TO 'caro_admin'@'localhost', 'martin_admin'@'localhost'; 
 +GRANT wp_editor TO 'tran_editor'@'localhost'; 
 +GRANT wp_read   TO 'wp_api'@'localhost'; 
 + 
 +-- Standardrollen aktiv bei Login 
 +SET DEFAULT ROLE ALL TO 
 +  'caro_admin'@'localhost', 
 +  'martin_admin'@'localhost', 
 +  'tran_editor'@'localhost', 
 +  'wp_api'@'localhost';
 </code> </code>
 +</WRAP>
  
-**3. Kontrolle**+===== 3) Rechte prüfen: SHOW GRANTS ===== 
 +<WRAP round 80% box>
 <code sql> <code sql>
-SHOW GRANTS FOR 'bob'@'localhost';+SHOW GRANTS FOR 'tran_editor'@'localhost'; 
 +-- Rolle "ausklappen": 
 +SHOW GRANTS FOR 'tran_editor'@'localhost' USING wp_editor; 
 + 
 +SHOW GRANTS FOR 'wp_api'@'localhost'; 
 +SELECT CURRENT_ROLE();  -- aktive Rollen der aktuellen Session
 </code> </code>
 +</WRAP>
  
-**4. Test (als bob)**+===== 4) Funktions-Tests ===== 
 +<WRAP round 80% box> 
 +**Als ''tran_editor'' (Redakteurverbinden**  
 <code sql> <code sql>
-USE bobdb+USE wttw; 
-INSERT INTO todos(title) VALUES ('Learn MySQL'); + 
-SELECT * FROM todos;+-- darf Inhalte pflegen: 
 +INSERT INTO posts(author_id, title, status) VALUES (3,'Utrecht – 10 Sehenswürdigkeiten','draft'); -- ✅ 
 +UPDATE posts SET status='published', published_at=NOW() WHERE post_id=LAST_INSERT_ID();             -- ✅ 
 +INSERT INTO comments(post_id, author, body) VALUES (1,'Leser','Toller Beitrag!');                  -- ✅ 
 + 
 +-- kein DDL: 
 +DROP TABLE posts; -- ❌ (erwarteter Fehler) 
 +</code> 
 + 
 +**Als ''wp_api'' (read-only Integration) verbinden**   
 +<code sql> 
 +USE wttw
 +SELECT COUNT(*FROM posts;         -- ✅ 
 +INSERT INTO posts(author_id,title) VALUES (1,'hack')-- ❌
 </code> </code>
 </WRAP> </WRAP>
  
-<WRAP tip round 80% center+===== 5) REVOKE – Rechte entziehen (an Benutzer oder Rolle) ===== 
-**Hinweis:** Für GRANT brauchen Sie entsprechende Admin-Rechte (zBals ''root'').   +<WRAP round 80% box
-''GRANT OPTION'' erlaubt, eigene Berechtigungen weiterzugeben – sparsam einsetzen.+**Temporär Kommentare sperren (alle Redakteure betroffen, da über Rolle):** 
 +<code sql> 
 +-- als root: an der Rolle entziehen 
 +REVOKE INSERT, DELETE ON wttw.comments FROM wp_editor; 
 + 
 +-- Prüfung: 
 +SHOW GRANTS FOR 'tran_editor'@'localhost' USING wp_editor; 
 + 
 +-- Rückgängig machen: 
 +GRANT INSERT, DELETE ON wttw.comments TO wp_editor; 
 +</code> 
 +</WRAP> 
 + 
 + 
 + 
 +**Gute Praxis:**   
 +  * **Least-Privilege** umsetzen (wp_read/wp_author/wp_editor/wp_admin)  
 +  * Host **nicht** mit ''%'' freigeben, wenn nicht nötig  
 +  * Standardrollen setzen (''SET DEFAULT ROLE'').   
 +  * Rechte regelmässig prüfen (''SHOW GRANTS'') 
 </WRAP> </WRAP>
  
  • modul/m290_guko/learningunits/lu12/theorie/c_rechte_vergeben.1762902009.txt.gz
  • Zuletzt geändert: 2025/11/12 00:00
  • von gkoch