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
PUBLICsau printr-un grup. Verifică cu\dp tabelsauhas_table_privilege. - Te aștepți ca
REVOKEsă închidă conexiunile deschise. Utilizatorul rămâne conectat; pentru a-l deconecta foloseștepg_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.