SQL REVOKE ist das DCL-Kommando, das zuvor mit GRANT erteilte Berechtigungen wieder entzieht. Es ist das direkte Gegenstück zur Rechtevergabe und Teil einer sauberen Zugriffskontrolle.
Syntax und Beispiele
-- SELECT-Recht entziehen
REVOKE SELECT ON kunden FROM 'leser'@'localhost';
-- Mehrere Rechte entziehen
REVOKE INSERT, UPDATE ON appdb.* FROM 'redakteur'@'localhost';
-- Nur die Weitergabe-Berechtigung entziehen
REVOKE GRANT OPTION FOR SELECT ON kunden FROM 'leser'@'localhost';
-- Alle Rechte entziehen
REVOKE ALL PRIVILEGES, GRANT OPTION FROM 'leser'@'localhost';
REVOKE, DENY und GRANT
In SQL Server gibt es zusätzlich DENY: Während REVOKE eine erteilte Berechtigung einfach entfernt, spricht DENY ein hartes Verbot aus, das Vorrang vor allen GRANT-Berechtigungen hat. In MySQL, MariaDB, PostgreSQL und Oracle gibt es DENY nicht – dort wird die fehlende Berechtigung durch das Entziehen erreicht.
Besonderheiten
- In SQL Server schlägt REVOKE fehl, wenn der Empfänger die Rechte mit GRANT OPTION weitergegeben hat – dann muss
CASCADEangegeben werden, um die Weitergabe-Kette mit zu lösen. - In PostgreSQL kann mit
REVOKE ... FROM PUBLICallen Benutzern gleichzeitig ein Recht entzogen werden. - REVOKE wirkt sofort; Benutzer mit aktiven Verbindungen müssen sich neu anmelden, damit die Änderung greift.
Wer Rechte strukturiert vergibt, nutzt Rollen, um dieselbe Berechtigung für viele Benutzer zentral zu verwalten. Grundlagen der Datenmanipulation erklärt SQL INSERT.