Ce face CREATE ROLE / CREATE USER
În PostgreSQL, utilizatorii și grupurile sunt același lucru: roluri. Un rol cu LOGIN este un utilizator care se poate conecta. Un rol NOLOGIN este de obicei un grup: îi dai drepturi, apoi îl atribui utilizatorilor cu GRANT grup TO utilizator.
CREATE USER este identic cu CREATE ROLE ... LOGIN. Rolurile sunt la nivel de server, comune tuturor bazelor de date; drepturile pe tabele se dau separat, în fiecare bază de date.
Din PostgreSQL 14, parolele se salvează implicit cu SCRAM-SHA-256. În psql, \password nume schimbă parola fără ca textul ei să ajungă în istoricul comenzilor sau în jurnalele serverului.
Parametri
| Parametru | Descriere |
|---|---|
LOGIN / NOLOGIN |
Poate sau nu să se conecteze. |
PASSWORD |
Parola de conectare. |
CREATEDB / CREATEROLE / SUPERUSER |
Drepturi speciale; dă-le cu grijă (SUPERUSER ocolește toate verificările). |
CONNECTION LIMIT n |
Numărul maxim de conexiuni simultane. |
VALID UNTIL |
Data până la care parola este valabilă. |
IN ROLE grup |
Adaugă rolul nou ca membru al grupului. |
Ce returnează
Mesajul CREATE ROLE (și pentru CREATE USER).
Exemple
Exemplul 1: Un grup de citire și doi utilizatori
CREATE ROLE cititori NOLOGIN;
CREATE ROLE ana LOGIN PASSWORD 'o-parola-lunga-si-unica' IN ROLE cititori;
CREATE USER aplicatie_web PASSWORD 'alta-parola-lunga' CONNECTION LIMIT 50;
Rezultat în psql
CREATE ROLE
CREATE ROLE
CREATE ROLE
Exemplul 2: Cont temporar pentru un colaborator
CREATE ROLE consultant LOGIN VALID UNTIL '2027-01-31';
\password consultant
GRANT cititori TO consultant;
Rezultat în psql
CREATE ROLE
Enter new password for user "consultant":
Enter it again:
GRANT ROLE
Exemplul 3: Ce roluri există
SELECT rolname, rolcanlogin, rolsuper
FROM pg_roles
WHERE rolname NOT LIKE 'pg\_%'
ORDER BY rolname;
Rezultat în psql
rolname | rolcanlogin | rolsuper
---------------+-------------+----------
ana | t | f
aplicatie_web | t | f
cititori | f | f
consultant | t | f
postgres | t | t
(5 rows)
Greșeli frecvente
- Aplicația se conectează cu utilizatorul
postgres(superuser). O vulnerabilitate în aplicație dă atunci acces total la server. Creează un rol separat, cu drepturi minime. - Scrii parola în clar în
CREATE ROLEpe un server culog_statement = 'all': parola ajunge în jurnal. Folosește\password. - Creezi rolul și te aștepți să poată citi tabelele: un rol nou nu are niciun drept pe tabele. Folosește
GRANT.
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.REVOKE: Retrage drepturi date anterior cu GRANT, de la un rol sau de la toți (PUBLIC).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.