PostgreSQL è un DBMS open-source che a sua volta utilizza SQL. È uno strumento molto potente che viene utilizzato per gestire applicazioni e ospitare dati web su VPS. In questo tutorial, imparerai a gestire i permessi in PostgreSQL. Ti aiuterà a fornire ai ruoli della tua applicazione i permessi richiesti. Eseguiremo questo tutorial utilizzando PostgreSQL su un Ubuntu 18.04 cloud server su CloudSigma.
Installazione di PostgreSQL
Per scaricare e installare PostgreSQL, esegui i seguenti comandi:
|
1 2 |
sudo apt-get update sudo apt-get install postgresql postgresql-contrib |
L’installatore creerà un utente predefinito – “Postgres” con cui operare. Useremo questo utente per la maggior parte di questo tutorial. Puoi accedere all’utente con questo comando:
|
1 |
sudo su - postgres |
Ora che PostgreSQL è installato, imparerai come gestisce i permessi. Puoi anche seguire il nostro tutorial su come configurare PostgreSQL su Ubuntu per una guida dettagliata passo dopo passo del processo di installazione.
Concetti sui permessi di PostgreSQL
Postgres gestisce i permessi attraverso il concetto di “ruoli”. Con i ruoli, non c’è distinzione tra utenti e gruppi. I ruoli sono più flessibili del tradizionale sistema Unix di utenti e gruppi. Ad esempio, un ruolo può agire come membro di un altro ruolo, ereditandone i permessi.
Visualizzare i ruoli in PostgreSQL
Per visualizzare i ruoli in PostgreSQL, devi prima accedere al prompt utilizzando il seguente comando:
|
1 |
psql |
Quindi, esegui quanto segue per visualizzare i ruoli:
|
1 |
\du |

Al momento, c’è solo un ruolo predefinito con tutti i privilegi.
Come creare ruoli in PostgreSQL
Puoi creare ruoli per Postgres sia dalla riga di comando che dall’interno della shell di Postgres. Puoi provare i seguenti due approcci, dopodiché vedrai come gestire i permessi e gli accessi in PostgreSQL.
How to Create Roles From Within PostgreSQL
Il modo più semplice per creare ruoli è dall’interno del prompt di Postgres. Puoi farlo con il seguente comando:
|
1 |
CREATE ROLE demo_role; |
Per verificare se è stato creato, esegui il comando:
|
1 |
\du |

Specifica che il nuovo ruolo non ha permessi di login. Imparerai come modificarlo più avanti nel tutorial.
Come creare ruoli dalla riga di comando
L’alternativa al metodo sopra indicato è creare l’utente dalla riga di comando. Per uscire dal prompt di PostgreSQL, digita quanto segue:
|
1 |
\q |
Puoi creare un ruolo chiamato “test” con il seguente comando:
|
1 |
createuser test |
Una volta eseguito il comando precedente, accedi a psql ed elenca i ruoli utilizzando i seguenti comandi:
|
1 2 |
psql \du |

Puoi notare che l’utente creato in questo modo non ha gli stessi attributi.
Come eliminare i ruoli in PostgreSQL
Puoi eliminare facilmente i ruoli in PostgreSQL utilizzando la seguente sintassi:
|
1 |
DROP ROLE role_name; |
Puoi eliminare il ruolo demo creato in precedenza utilizzando il comando:
|
1 |
DROP ROLE demo_role; |

Se proviamo a eliminare un ruolo che non esiste, restituirà semplicemente un errore. Per vederlo, puoi provare a eliminare nuovamente lo stesso ruolo:
|
1 |
DROP ROLE demo_role; |

Se vuoi che il comando non restituisca un errore quando il ruolo non esiste, puoi aggiungere ‘IF EXISTS’ nel comando:
|
1 |
DROP ROLE IF EXISTS role_name; |
Puoi riprovare a eliminare il ruolo con questo comando:
|
1 |
DROP ROLE IF EXISTS demo_role; |
Come definire i privilegi al momento della creazione del ruolo
Fino ad ora, hai creato ed eliminato ruoli. In questa sezione, creerai ruoli con permessi modificati. Puoi farlo specificando i permessi per il ruolo con il comando di creazione:
|
1 |
CREATE ROLE role_name WITH optional_permissions; |
Per vedere le opzioni disponibili, puoi aprire l’aiuto usando questo comando:
|
1 |
\h CREATE ROLE |

Se vuoi creare un ruolo con permessi di login, puoi formulare il comando in questo modo:
|
1 |
CREATE ROLE demo_role WITH LOGIN; |

Come abbiamo visto in precedenza, se desideri creare ruoli con autorizzazione di accesso, puoi anche utilizzare il seguente comando:
|
1 |
CREATE USER role_name; |
L’unica differenza tra i due comandi è che ‘CREATE USER’ concede l’autorizzazione di accesso al ruolo per impostazione predefinita.
Come modificare i privilegi dei ruoli in PostgreSQL
Fino ad ora, hai provato a concedere le autorizzazioni durante la creazione dell'utente. In questa sezione, modificherai le autorizzazioni degli utenti già creati. La sintassi per il comando alter è:
|
1 |
ALTER ROLE role_name WITH attribute_options; |
Ad esempio, se lo desideri, puoi modificare le autorizzazioni di accesso di demo_role in ‘log in’ con questo comando:
|
1 |
ALTER ROLE demo_role WITH NOLOGIN; |

Per consentire nuovamente all'utente di accedere, puoi modificare le autorizzazioni con il seguente comando:
|
1 |
ALTER ROLE demo_role WITH LOGIN; |
Come accedere come utente diverso in PostgreSQL
PostgreSQL consente di accedere solo localmente per impostazione predefinita se il nome utente corrisponde a quello del sistema. Per ovviare a questo problema, puoi modificare il tipo di accesso o configurare PostgreSQL per utilizzare l'interfaccia di rete di loopback. Questa interfaccia cambierà il tipo di connessione in remota, anche se la connessione è locale.
In questa sezione proverai la seconda opzione. Per iniziare, puoi impostare la password dell'utente, in modo che l'autenticazione sia possibile.
Imposta la password di ‘demo_user’ con il seguente comando:
|
1 |
\password test |
Quando richiesto, inserisci e conferma la password. Una volta fatto, puoi uscire dall'interfaccia di PostgreSQL e tornare al normale utente della tua macchina:
|
1 2 |
\q exit |
PostgreSQL richiede di accedere con un nome utente che corrisponda a quello del sistema operativo e anche di connettersi al database con lo stesso nome utente. Poiché in questo caso non lo farai, dovrai specificare esplicitamente le opzioni che desideri utilizzare. Puoi usare la seguente sintassi:
|
1 |
psql -U <span class="highlight">user</span> -d <span class="highlight">db</span> -h 127.0.0.1 -W |
user: Il nome utente con cui desideri connetterti
DB: Un database esistente a cui hai accesso
-h 127.0.0.1: Specifica a PostgreSQL che ti connetterai tramite un'interfaccia di rete alla macchina locale. Questa opzione ci consente l'autenticazione anche se il nome utente non corrisponde a quello del sistema.
-W: Indica a PostgreSQL che inserirai una password
Per accedere con il nostro “test_user,” possiamo impartire il seguente comando:
|
1 |
psql -U test -d postgres -h 127.0.0.1 -W |

Una volta inserita la password, verrai connesso alla shell. Nel nostro esempio, utilizziamo il database ‘postgres,’ il database predefinito configurato automaticamente durante l'installazione.
In questa sessione, in base all'utente selezionato per l'accesso, riscontrerai un problema dovuto al fatto che non disponi delle autorizzazioni corrette per eseguire varie azioni. Il motivo del problema è che non hai ancora concesso all'utente autorizzazioni sufficienti per amministrare le risorse.
Nella sezione successiva, concederai le autorizzazioni richieste agli utenti. Innanzitutto, dovrai reimpostare l'utente su uno amministrativo:
|
1 2 3 |
\q sudo su - postgres psql |
Gestire le autorizzazioni in PostgreSQL: come concedere le autorizzazioni in PostgreSQL
In PostgreSQL, se un database o una tabella viene creata da un ruolo specifico, solo quel ruolo ha le autorizzazioni per modificarla. L'eccezione a questo sono i ruoli che dispongono delle autorizzazioni di superuser. In questa sezione, concederai le autorizzazioni ad altri ruoli. Puoi concedere autorizzazioni ad altri ruoli utilizzando l'istruzione ‘GRANT’. La sintassi è:
|
1 |
GRANT permission_type ON table_name TO role_name; |
È possibile creare una tabella semplice per eseguire il comando:
|
1 2 3 4 |
CREATE TABLE demo ( name varchar(25), id serial, start_date date); |
Per vedere la tabella creata, esegui il comando:
|
1 |
\d |

Ora che hai una tabella demo, puoi concedere i privilegi sulla tabella ‘demo’ a ‘demo_role.’ Puoi assegnare al ruolo il privilegio ‘UPDATE’ con questo comando:
|
1 |
GRANT UPDATE ON demo TO demo_role; |
Puoi concedere tutti i permessi a un ruolo specificando il permesso come ‘ALL’:
|
1 |
GRANT ALL ON demo TO demo_role; |
Se desideri concedere un permesso specifico a tutti i ruoli del sistema, puoi utilizzare la parola chiave ‘public’ invece del ruolo, come nel seguente comando:
|
1 |
GRANT INSERT ON demo TO PUBLIC; |
Puoi visualizzare tutti i permessi concessi utilizzando il seguente comando:
|
1 |
\z |
Gestire i permessi in PostgreSQL: come rimuovere i permessi in PostgreSQL
Puoi rimuovere facilmente i permessi di un ruolo utilizzando il comando ‘REVOKE’. È molto simile al comando grant:
|
1 |
REVOKE permission_type ON table_name FROM user_name; |
Come con GRANT, possiamo usare le parole chiave – ‘ALL’ e ‘PUBLIC’ per concedere tutti i permessi o concedere permessi a tutti i ruoli:
|
1 |
REVOKE INSERT ON demo FROM PUBLIC; |
Come utilizzare i ruoli di gruppo in PostgreSQL
Per consentire un controllo diffuso dei permessi, i ruoli sono sufficientemente flessibili da permettere il raggruppamento con altri ruoli. Ad esempio, puoi creare un ruolo – ‘temporary_role’ e poi aggiungere ‘demo_role’ e ‘test_user’ a quel ruolo:
|
1 2 3 |
CREATE ROLE temporary_role; GRANT temporary_role TO demo_role; GRANT temporary_role TO test_user; |
Ora puoi gestire i permessi di questi due ruoli semplicemente gestendo i permessi del ruolo ‘temporary_role’. Ciò consente una gestione più semplice dei permessi. Puoi vedere le informazioni sull'appartenenza ai ruoli con questo comando:
|
1 |
\du |

Qualsiasi membro del gruppo può agire come gruppo utilizzando il comando ‘set role’. Poiché l'utente ‘postgres’ è un superutente, puoi utilizzare ‘set role’ anche se non sei un membro del gruppo:
|
1 |
SET ROLE temporary_role; |
Tutte le tabelle che creerai ora saranno di proprietà di temporary_role:
|
1 2 3 4 |
CREATE TABLE hello ( name varchar(25), id serial, start_date date); |
Per verificare la proprietà della tabella, esegui il seguente comando:
|
1 |
\d |

Puoi vedere che il ruolo ‘temporary_role’ possiede la nuova tabella e la sequenza associata al tipo di dati serial. Per ripristinare i permessi del ruolo originale, esegui il seguente comando:
|
1 |
RESET ROLE; |
Se desideri che il ruolo abbia tutti i privilegi del ruolo a cui appartiene, puoi specificare la proprietà ‘inherit’ con il comando ‘alter role’:
|
1 |
ALTER ROLE test_user INHERIT; |
Con il comando precedente, ‘test_user’ ha ottenuto tutti i privilegi dei ruoli a cui appartiene. Per eliminare un ruolo, puoi utilizzare il comando ‘drop role’:
|
1 |
DROP ROLE temporary_users; |

Il comando precedente restituisce un errore perché abbiamo alcuni oggetti, come la tabella ‘hello’, che dipendono da esso. Per eliminarlo, puoi trasferire la proprietà della tabella a un ruolo diverso:
|
1 |
ALTER TABLE hello OWNER TO demo_role; |
Puoi verificare che temporary_role non possieda alcuna tabella ora con il seguente comando:
|
1 |
\d |

Ora puoi eliminare il ruolo ‘temporary_role’ poiché non ha più dipendenze:
|
1 |
DROP ROLE temporary_users; |
Anche se il comando precedente eliminerà il ruolo temporary_users, i precedenti membri del gruppo di ruoli non vengono rimossi.
Conclusione
Hai completato il tutorial e ora sai come gestire i permessi in PostgreSQL. Puoi amministrare i permessi facilmente. Sapere come gestire i permessi garantisce che le tue applicazioni abbiano accesso ai database richiesti, senza avere accesso a nessun altro database utilizzato da un’applicazione diversa.
Buona programmazione!


Commenti
Ancora nessun commento. Scrivi il primo.