DBAtlas · Atlas für Datenbankbetrieb

Least-Privilege-Modell mit Rollen aufbauen (CREATE ROLE, DEFAULT ROLE)

MySQLSicherheit

Befehl

CREATE ROLE IF NOT EXISTS 'app_read', 'app_write';
GRANT SELECT ON shop.* TO 'app_read';
GRANT INSERT, UPDATE, DELETE ON shop.* TO 'app_write';

-- Application account: network range, TLS required, roles active by default
CREATE USER 'svc_app'@'10.0.%' IDENTIFIED BY 'S3cure#App2024' DEFAULT ROLE 'app_read', 'app_write' REQUIRE SSL;
CREATE USER 'ana'@'%' IDENTIFIED BY 'An4#Report2024';
GRANT 'app_read' TO 'ana'@'%';
SET DEFAULT ROLE ALL TO 'ana'@'%';

-- Show grants with roles expanded
SHOW GRANTS FOR 'svc_app'@'10.0.%' USING 'app_read', 'app_write';
SELECT FROM_USER, FROM_HOST, TO_USER, TO_HOST FROM mysql.role_edges;

Was es tut

Vergibt Berechtigungen an Rollen statt an einzelne Benutzer; Konten erhalten Berechtigungen über die Rollenmitgliedschaft. Änderungen erfolgen an einer Stelle, Audits und Offboarding werden einfacher.

Wann einsetzen

Beim Anlegen neuer Anwendungs- / Teamkonten und beim Aufräumen von Altservern mit verworrenen Berechtigungen.

Vorsicht

Eine Rolle, die keine Default-Rolle ist, ist in der Session nicht aktiv (CURRENT_ROLE() NONE), und dem Benutzer scheinen Berechtigungen zu fehlen; nutze SET DEFAULT ROLE ALL oder activate_all_roles_on_login=ON. Eine Rolle ist auch ein Konto (gesperrt, ohne Passwort) und erscheint in mysql.user. Für Anwendungskonten einen Netzbereich statt '%' verwenden. Einem Anwendungskonto niemals ALL, SUPER, FILE, PROCESS oder CONNECTION_ADMIN gewähren. Das Entziehen einer Berechtigung von einer Rolle wirkt auch auf aktive Sessions.

In DBAtlas öffnen →

Verwandte Einträge