CodeGym /Corsi /SQL SELF /Creazione e gestione dei ruoli: ROLES

Creazione e gestione dei ruoli: ROLES

SQL SELF
Livello 47, Lezione 1
Disponibile

Un ruolo in PostgreSQL può rappresentare sia un singolo utente che un gruppo di utenti. Gestisce l’accesso ai database, alle tabelle, agli schemi e ad altri oggetti.

Quando crei un ruolo, di default non è legato a un utente o gruppo specifico, ma puoi assegnargli proprietà e permessi che ti servono per i tuoi scopi.

Differenza tra ruoli e utenti

E gli utenti? Occhio a non confondersi. In PostgreSQL anche gli utenti sono considerati ruoli, ma con una particolarità: gli utenti hanno sempre la possibilità di fare login. Quindi ogni ruolo può essere un utente, se ha l’attributo LOGIN. Se vuoi solo raggruppare utenti o non vuoi che il ruolo possa fare login, puoi non aggiungere l’attributo LOGIN.

Esempio:

  • Ruolo con attributo LOGIN = utente.
  • Ruolo senza LOGIN = gruppo o “ruolo di servizio”.

Creiamo un ruolo

Per creare ruoli si usa il comando CREATE ROLE. La sintassi è questa:

CREATE ROLE <nome_ruolo> [WITH] [parametri];

Dove parametri sono le proprietà del ruolo, tipo:

  • LOGIN — possibilità di accedere al database.
  • CREATEDB — possibilità di creare database.
  • CREATEROLE — possibilità di creare altri ruoli.
  • SUPERUSER — accesso totale (ruoli pericolosi, usali con attenzione).
  • PASSWORD — password per l’autenticazione.

Vediamo un esempio di creazione di un ruolo utente. Supponiamo che vuoi creare l’utente student con diritto di login e password. Esegui questa query:

CREATE ROLE student WITH LOGIN PASSWORD 'securePassword123';

Questo comando crea un ruolo chiamato student che può collegarsi al database.

Ora creiamo il ruolo teachers, che sarà un gruppo. Un ruolo di gruppo non ha bisogno dell’attributo LOGIN, perché gli utenti che fanno parte del gruppo useranno i loro account.

CREATE ROLE teachers;

Assegnare privilegi ai ruoli

I ruoli in PostgreSQL vengono creati per dare o limitare l’accesso alle risorse. Per questo si usano i comandi GRANT e REVOKE.

Concedere permessi con GRANT

Sintassi del comando:

GRANT <privilegi> ON <oggetto> TO <ruolo>;

Creiamo una tabella courses e diamo al ruolo teachers i permessi di leggere e modificare i dati in questa tabella.

-- Creiamo la tabella
CREATE TABLE courses (
    id SERIAL PRIMARY KEY,
    name TEXT NOT NULL,
    teacher_id INT
);

-- Concediamo l’accesso
GRANT SELECT, INSERT, UPDATE ON courses TO teachers;

Ora tutti gli utenti che fanno parte del ruolo teachers possono vedere, aggiungere e modificare i dati nella tabella.

Revocare permessi con REVOKE

Per togliere i permessi si usa il comando REVOKE. Sintassi:

REVOKE <privilegi> ON <oggetto> FROM <ruolo>;

Per vietare al gruppo teachers di aggiornare i dati nella tabella courses, esegui:

REVOKE UPDATE ON courses FROM teachers;

Gerarchia dei ruoli: ereditarietà

Gli utenti possono “ereditare” i privilegi da un ruolo-gruppo per semplificare la gestione. È come passare “l’eredità” da un utente all’altro.

La parola chiave INHERIT permette a un ruolo di ereditare i privilegi da un altro ruolo. Questo comportamento è attivo di default, ma puoi cambiarlo.

Esempio:

-- Aggiungiamo l’utente `john` al gruppo `teachers`
GRANT teachers TO john;

Ora l’utente john riceve automaticamente tutti i privilegi assegnati al ruolo di gruppo teachers.

Controlliamo i privilegi:

\du john

Se vuoi disattivare l’ereditarietà, crea il ruolo con l’attributo NOINHERIT.

CREATE ROLE admin NOINHERIT;

Ora gli utenti nel ruolo admin non potranno usare di default i suoi privilegi.

Creare gruppi di ruoli per gestire l’accesso

I gruppi di ruoli rendono più facile gestire l’accesso, soprattutto in progetti grandi. Invece di dare permessi a ogni utente, puoi aggiungere gli utenti ai gruppi e dare i permessi ai gruppi.

Ecco un esempio semplice di ruolo di gruppo. Creiamo i gruppi:

  • students — gruppo per gli studenti.
  • teachers — gruppo per i docenti.
CREATE ROLE students;
CREATE ROLE teachers;

Assegniamo gli utenti ai gruppi:

-- Assegna l’utente john al gruppo students
GRANT students TO john;

-- Assegna l’utente jane al gruppo teachers
GRANT teachers TO jane;

Ora, dando accesso alle tabelle ai gruppi students e teachers, lo dai automaticamente a tutti i loro membri!

Esercizio pratico

  1. Crea una tabella exams con i campi:
    • id: chiave primaria;
    • subject: testo;
    • teacher_id: ID del docente.
CREATE TABLE exams (
    id SERIAL PRIMARY KEY,
    subject TEXT NOT NULL,
    teacher_id INT
);
  1. Crea i gruppi di ruoli students e teachers.
CREATE ROLE students;
CREATE ROLE teachers;
  1. Dai al gruppo teachers i permessi di aggiungere e modificare dati nella tabella exams.
GRANT INSERT, UPDATE ON exams TO teachers;
  1. Dai al gruppo students solo il permesso di leggere i dati.
GRANT SELECT ON exams TO students;
  1. Crea l’utente alice e aggiungila al gruppo students.
CREATE ROLE alice WITH LOGIN PASSWORD 'alicePassword';
GRANT students TO alice;
  1. Controlla quali permessi ha alice collegandoti con il suo account.

Ora sai come creare ruoli, gestire i loro privilegi e semplificare l’amministrazione usando i ruoli di gruppo. Nella prossima lezione vedremo come configurare l’accesso con i comandi GRANT e REVOKE per un controllo più preciso a livello di database, schema e tabelle.

2
Compito
SQL SELF, livello 47, lezione 1
Bloccato
Creazione di un ruolo di gruppo e assegnazione degli utenti
Creazione di un ruolo di gruppo e assegnazione degli utenti
Commenti
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION