PostgreSQL
 sql >> Database >  >> RDS >> PostgreSQL

Autorizzazioni utente PostgreSQL

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 PostgreSQL
  • SUPERUSER / NOSUPERUSER :consente (o meno) i permessi di superutente. Un superutente del database ignorerà altri controlli di autorizzazione, ad eccezione di LOGIN (deve essere concesso separatamente).
  • CREATEDB / NOCREATEDB :consente (o meno) la possibilità di creare nuovi database
  • CREATEROLE / NOCREATEROLE :consente (o meno) la possibilità di creare nuovi ruoli
  • CREATEUSER / NOCREATEUSER :consente (o meno) la possibilità di creare nuovi utenti
  • INHERIT / NOINHERIT :consente (o meno) la possibilità di rendere ereditabili i privilegi
  • REPLICATION / 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;