In PostgreSQL, tutto è costruito attorno al concetto di ruolo .
Durante la prima installazione di PostgreSQL su macOS, lo script creava un ruolo con il tuo nome utente macOS , con un elenco di autorizzazioni concesse.
Non ci sono utenti in PostgreSQL, solo ruoli .
Eseguendo psql postgres
nel tuo terminale, accederai automaticamente con il tuo nome utente macOS a PostgreSQL, accedendo quindi al ruolo creato.
Nel mio caso i flaviocopes
è stato creato il ruolo e posso vederlo usando il \du
comando:
Vedere? Ho i seguenti attributi dei ruoli per impostazione predefinita:
Superuser
Create role
Create DB
Replication
Bypass RLS
e non sono membro di nessun altro ruolo (ne parleremo più avanti)
Creazione di un nuovo ruolo
Un nuovo ruolo viene creato utilizzando CREATE ROLE
comando:
CREATE ROLE <role>;
Ad esempio:
CREATE ROLE testing;
Abbiamo un nuovo ruolo, con Cannot login
attributo di ruolo. Il nostro utente appena creato non sarà in grado di accedere.
Puoi provare digitando il \q
comando, quindi psql postgres -U testing
, ma vedrai questo errore:
Per risolvere questo problema dobbiamo aggiungere il LOGIN
attributo del ruolo alla creazione:
CREATE ROLE <role> WITH LOGIN;
Se rimuoviamo quel ruolo utilizzando:
DROP ROLE <role>;
e aggiungi WITH LOGIN
questa volta:
DROP ROLE testing;
CREATE ROLE testing WITH LOGIN;
Possiamo vedere che il testing
il ruolo può accedere, perché non abbiamo il Cannot login
attributo role questa volta:
Prova aggiungendo il comando \q
per uscire, quindi psql postgres -U testing
:
Nota che il richiesta modificato da =#
a =>
perché non abbiamo il Superuser
attributo ruolo ora.
Aggiunta di una password a un ruolo
Nel precedente CREATE ROLE
comando abbiamo creato un ruolo senza password. Ovviamente è molto importante avere password (sicure). Puoi aggiungere una password utilizzando il PASSWORD
parola chiave:
CREATE ROLE <role> WITH LOGIN PASSWORD '<password>';
CREA UTENTE
Un modo alternativo per definire i ruoli con il LOGIN
l'attributo aggiunto automaticamente (creando effettivamente utenti che possono accedere) consiste nell'usare CREATE USER
:
CREATE USER <role> PASSWORD '<password>';
Aggiunta di un attributo role a un ruolo
Un attributo role può essere aggiunto in seguito a un ruolo utilizzando ALTER ROLE
comando.
Supponiamo di aver creato un ruolo senza l'attributo LOGIN:
CREATE ROLE <username> PASSWORD '<password>';
Possiamo aggiungerlo usando:
ALTER ROLE <role> WITH LOGIN;
Attributi del ruolo integrati
Abbiamo visto il LOGIN
già l'attributo role, per consentire a un ruolo di accedere.
Ma quali sono gli altri attributi di ruolo integrati che possiamo utilizzare?
LOGIN
/NOLOGIN
:consente (o meno) di accedere a PostgreSQLSUPERUSER
/NOSUPERUSER
:consente (o meno) i permessi di superutente. Un superutente del database ignorerà altri controlli di autorizzazione, ad eccezione diLOGIN
(deve essere concesso separatamente).CREATEDB
/NOCREATEDB
:consente (o meno) la possibilità di creare nuovi databaseCREATEROLE
/NOCREATEROLE
:consente (o meno) la possibilità di creare nuovi ruoliCREATEUSER
/NOCREATEUSER
:consente (o meno) la possibilità di creare nuovi utentiINHERIT
/NOINHERIT
:consente (o meno) la possibilità di rendere ereditabili i privilegiREPLICATION
/NOREPLICATION
:concedere (o meno) autorizzazioni di replica (un argomento avanzato che non tratteremo)
Ruoli di gruppo
In PostgreSQL non ci sono gruppi di utenti.
Puoi invece creare ruoli con determinate autorizzazioni e quindi concedere tali ruoli ad altri ruoli.
I ruoli erediteranno le autorizzazioni dei ruoli loro concessi, se tali ruoli hanno l'attributo INHERIT.
Crea un ruolo di gruppo
Per creare un ruolo di gruppo, digita
CREATE ROLE <groupname>;
La sintassi è la stessa della creazione di un ruolo.
Una volta creato il ruolo del gruppo, puoi aggiungere ruoli al ruolo del gruppo utilizzando GRANT
:
GRANT <groupname> TO <role>
Ad esempio, possiamo creare un flavio
ruolo utente, un ruolo di gruppo "dipendente" e assegnare l'utente al ruolo di gruppo:
CREATE USER flavio PASSWORD 'superSecret123$';
CREATE ROLE employee;
GRANT employee TO flavio;
Puoi rimuovere un ruolo da un ruolo di gruppo utilizzando:
REVOKE <groupname> FROM <username>
Esempio:
REVOKE employee FROM flavio;
Attributi del ruolo del gruppo
Per impostazione predefinita, l'aggiunta di un ruolo a un ruolo di gruppo non fare in modo che il ruolo erediti gli attributi (autorizzazioni) dal ruolo del gruppo.
Devi creare il ruolo di gruppo con INHERIT
attributo.
Si supponga di creare il ruolo del gruppo di dipendenti e di assegnargli il CREATEDB
attributo:
CREATE ROLE employee WITH CREATEDB INHERIT;
Ora crea un nuovo ruolo usando INHERIT
:
CREATE ROLE flavio;
GRANT employee TO flavio;