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).