Documentazione di PostgreSQL 9.0 > Amministrazione del server > Privilegi e ruoli del database
PrecedenteAuthentication problemsAttributi del ruoloSuccessivo

20. Privilegi e ruoli del database

PostgreSQL™ gestisce i permessi di accesso al database usando il concetto di ruoli. Un ruolo può essere pensato sia come un utente del database, sia come gruppo di utenti del database, a seconda di come è impostato il ruolo. I ruoli possono possedere gli oggetti del database (per esempio, tabelle) e possono assegnare privilegi su quegli oggetti ad altri ruoli per controllare chi ha accesso a quali oggetti. Inoltre, è possibile garantire l'appartenenza a un ruolo a un altro ruolo, permettendo in questo modo al membro del ruolo di usare i privilegi assegnati a un altro ruolo.

Il concetto di ruoli comprende i concetti di «utenti» e «gruppi». Nelle versioni di PostgreSQL™ precedenti la 8.1, utenti e gruppi erano entità diverse, ma adesso ci sono solo ruoli. Qualsiasi ruolo può comportarsi come un utente, un gruppo, o entrambi.

Questo capitolo descrive come creare e gestire i ruoli e introduce il sistema dei privilegi. Maggiori informazioni sui diversi tipi di oggetti del database e gli effetti dei privilegi possono essere trovati in Capitolo 5, Definizione dei dati.

20.1. Ruoli del database Database Roles

I ruoli del database sono completamente separati concettualmente dagli utenti del sistema operativo. In pratica potrebbe essere conveniente mantenere una corrispondenza, ma questo non è richiesto. I ruoli del database sono globali attraverso l'installazione di un cluster di database (e non per singoli database). Per creare un ruolo usare il comando SQL CREATE ROLE(7):

CREATE ROLE name;

name segue le regole per gli identificatori SQL: sia non adornati senza caratteri speciali, oppore tra doppi apici. (In pratica, di solito si vorrà aggiungere opzioni addizionali al comando, tipo LOgin. Maggiori dettagli appaiono sotto. Per rimuovere un ruolo esistente, usare l'analogo comando DROP ROLE(7):

DROP ROLE name;

Per convenienza, i programmi createuser(1) e dropuser(1) sono fornite come wrapper per quei comandi SQL che possono essere lanciati dalla shell:

createuser name
dropuser name

Per determinare l'insieme di ruoli esistenti, esaminare il catalogo di sistema pg_roles, per esempio

SELECT rolname FROM pg_roles;

Il meta comando \du del programma psql(1) è utile per elencare i ruoli esistenti.

Per fare il bootstrap di unsistema di database, un sistema appena installato contiene un ruolo predefinito. Questo ruolo è sempre un «superuser», e in maniera predefinita (a meno che non sia stato cambiato con l'initdb) avrà lo stesso nome dell'utente del sistema operativo che ha inizializzato il cluster di database. Di norma, questo ruolo sarà chiamato postgres. Per creare altri ruoli si deve prima connettersi come questo ruolo iniziale.

Ogni connessione al server di database è fatta usando il nome di qualche ruolo particolare, e questo ruolo determina i privilegi d'accesso iniziali per i comandi emessi in quella connessione. Il nome del ruolo da usare per un particolare connessione al database è indicato dal client che inizia la richiesta di connessione nel modo specifico dell'applicazione. Per esempio, il programma psql usa l'opzione a linea di comando -U per indicare il ruolo con cui connettersi. Molte applicazioni assumono il nome dell'utente corrente del sistema operativo come predefinito (incluse createuser e psql). Comunque spesso è conveniente mantenere una corrispondenza di nomi tra i ruoli e gli utenti del sistema operativo.

L'insieme dei ruoli del database coi quali un dato client può connettersi è determinato dall'impostazione dell'autenticazione del client, come spiegato in Capitolo 19, Client Authentication. (In più, un client non è limitato alla possibilità di connettersi come il ruolo corrispondente al suo utente del sistema operativo, esattamente come il nome di login di una persona non deve corrispondere al suo nome reale). Dato che l'identità del ruolo determina l'insieme di privilegi disponibili a un client connesso, è importante configurare con cura i privilegi quando si mette su un ambiente multiutente.

Documentazione di PostgreSQL 9.0 > Amministrazione del server > Privilegi e ruoli del database
PrecedenteAuthentication problemsAttributi del ruoloSuccessivo