====== LU12d - Rollen: Rechte einfach verwalten ======
**Warum Rollen?** Mehrere Benutzer brauchen oft **dieselben** Rechte. Statt alle einzeln zu pflegen: **einmal** an Rolle vergeben → Rolle an Benutzer zuweisen.
==== Beispiel: CRM-Datenbank ====
**1. DB & Tabelle**
CREATE DATABASE IF NOT EXISTS crm;
USE crm;
CREATE TABLE IF NOT EXISTS customers(
id INT PRIMARY KEY AUTO_INCREMENT,
first_name VARCHAR(255) NOT NULL,
last_name VARCHAR(255) NOT NULL,
phone VARCHAR(32) NOT NULL,
email VARCHAR(255)
);
**2. Rollen anlegen**
CREATE ROLE IF NOT EXISTS crm_dev, crm_read, crm_write;
**3. Rechte an Rollen vergeben**
GRANT ALL ON crm.* TO crm_dev; -- Entwickler: alles
GRANT SELECT ON crm.* TO crm_read; -- nur lesen
GRANT INSERT, UPDATE, DELETE ON crm.* TO crm_write; -- lesen+schreiben
**4. Benutzer anlegen & Rollen zuweisen**
CREATE USER IF NOT EXISTS 'crm_dev1'@'localhost' IDENTIFIED BY 'Secure$1782';
CREATE USER IF NOT EXISTS 'crm_read1'@'localhost' IDENTIFIED BY 'Secure$5432';
CREATE USER IF NOT EXISTS 'crm_write1'@'localhost' IDENTIFIED BY 'Secure$9075';
CREATE USER IF NOT EXISTS 'crm_write2'@'localhost' IDENTIFIED BY 'Secure$3452';
GRANT crm_dev TO 'crm_dev1'@'localhost';
GRANT crm_read TO 'crm_read1'@'localhost';
GRANT crm_read, crm_write TO 'crm_write1'@'localhost', 'crm_write2'@'localhost';
**5. Standardrollen setzen (auto-aktiv bei Login)**
SET DEFAULT ROLE ALL TO 'crm_read1'@'localhost', 'crm_write1'@'localhost', 'crm_write2'@'localhost', 'crm_dev1'@'localhost';
==== Rollen aktivieren/prüfen ====
**Aktive Rollen sehen**
SELECT CURRENT_ROLE();
**Rollen umschalten (Session)**
SET ROLE NONE; -- keine Rolle aktiv
SET ROLE ALL; -- alle zugewiesenen aktiv
SET ROLE DEFAULT; -- Standardrollen aktiv
-- oder gezielt:
SET ROLE crm_read;
**Änderung an Rolle wirkt für alle Benutzer**, denen die Rolle zugewiesen ist (z. B. temporär ''REVOKE UPDATE'' von ''crm_write'').