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