REVOKE în PostgreSQL

Utilizatori și permisiuni PostgreSQL 8.0+

Retrage drepturi date anterior cu GRANT, de la un rol sau de la toți (PUBLIC).

Sintaxă SQL
REVOKE {SELECT | INSERT | UPDATE | DELETE | ALL} ON tabel FROM rol [CASCADE];
REVOKE CREATE ON SCHEMA public FROM PUBLIC;
REVOKE grup FROM rol;

Ce face REVOKE

REVOKE este opusul lui GRANT: scoate un drept pe un obiect sau scoate un rol dintr-un grup. Retragerea se aplică imediat, inclusiv conexiunilor deja deschise, de la următoarea comandă.

Un rol poate avea același drept pe mai multe căi: direct, prin grupurile din care face parte și prin PUBLIC (toți utilizatorii). REVOKE ... FROM ana scoate doar dreptul dat direct lui ana; dacă îl are și prin grup, îl păstrează.

PUBLIC primește implicit unele drepturi: CONNECT și TEMPORARY pe bazele de date noi și EXECUTE pe funcțiile noi. Până la PostgreSQL 14 avea și CREATE pe schema public; din PostgreSQL 15 nu mai are.

Parametri

Parametru Descriere
FROM rol | PUBLIC De la cine se retrage dreptul.
CASCADE Retrage și drepturile pe care rolul le-a dat mai departe (cu WITH GRANT OPTION).
GRANT OPTION FOR Retrage doar dreptul de a da mai departe, nu și dreptul în sine.

Ce returnează

Mesajul REVOKE (sau REVOKE ROLE pentru apartenența la un grup).

Exemple

Exemplul 1: Aplicația nu mai poate modifica facturile

REVOKE UPDATE, DELETE ON facturi FROM aplicatie_web;
SELECT has_table_privilege('aplicatie_web', 'facturi', 'UPDATE') AS poate_modifica;

Rezultat în psql

REVOKE
 poate_modifica 
----------------
 f
(1 row)

Exemplul 2: Bază de date închisă pentru toți, în afară de cei aleși

REVOKE CONNECT ON DATABASE contabilitate FROM PUBLIC;
GRANT CONNECT ON DATABASE contabilitate TO contabili;

Rezultat în psql

REVOKE
GRANT

Exemplul 3: Scoaterea unui utilizator dintr-un grup

REVOKE cititori FROM consultant;
ALTER ROLE consultant NOLOGIN;

Rezultat în psql

REVOKE ROLE
ALTER ROLE

Greșeli frecvente

  • Retragi dreptul de la utilizator, dar el îl are în continuare prin PUBLIC sau printr-un grup. Verifică cu \dp tabel sau has_table_privilege.
  • Te aștepți ca REVOKE să închidă conexiunile deschise. Utilizatorul rămâne conectat; pentru a-l deconecta folosește pg_terminate_backend().

Comenzi înrudite

  • GRANT și ALTER DEFAULT PRIVILEGES: Dă unui rol drepturi pe o bază de date, o schemă, tabele sau secvențe. ALTER DEFAULT PRIVILEGES le dă automat și pe tabelele create ulterior.
  • CREATE ROLE / CREATE USER: Creează un rol: un utilizator care se poate conecta (LOGIN) sau un grup de drepturi atribuit altor roluri.
  • CREATE DATABASE / DROP DATABASE: Creează sau șterge o bază de date pe serverul PostgreSQL. O bază de date conține scheme, tabele și utilizatorii ei au drepturi separate.