DataSunrise Consegue la Certificazione AWS DevOps Competency per AWS DevSecOps e Monitoraggio, Logging e Performance

Row Level Security

Row Level Security

Row Level Security

Nell’odierno mondo basato sui dati, proteggere le informazioni sensibili è di fondamentale importanza. I database contengono molti dati e è importante far sì che solo le persone autorizzate possano accedere a certe parti di essi. Qui entra in gioco Row Level Security (RLS).

Row Level Security è una potente funzionalità che permette agli amministratori di database di controllare l’accesso alle singole righe. Il controllo dipende dai ruoli degli utenti, dalle autorizzazioni o da altri criteri. Questo articolo coprirà le basi del Row Level Security. Vedremo come funziona in diversi database e useremo esempi per mostrarne l’uso.

Che Cos’è il Row Level Security?

Row Level Security limita l’accesso a certe righe in un database basandosi su condizioni che Lei imposta. Fornisce un controllo preciso su chi può vedere o modificare i dati, garantendo che gli utenti interagiscano solo con righe autorizzate. Questo è particolarmente importante in scenari in cui una tabella contiene informazioni sensibili, come dati personali, registri finanziari o dettagli aziendali riservati.

Row Level Security si concentra sul controllo dell’accesso a livello delle singole righe, piuttosto che dell’intera tabella. Non si controlla l’accesso all’intera tabella; RLS permette di specificare quali righe un utente può visualizzare in base a fattori come il ruolo o il dipartimento.

Implementazione dell’RLS

Diversi sistemi di database offrono vari meccanismi per implementare Row Level Security. Vediamo come funziona in PostgreSQL e SQL Server.

PostgreSQL

PostgreSQL fornisce una funzionalità chiamata Row Level Security. Consente di definire politiche per controllare l’accesso alle singole righe. Per abilitare RLS su una tabella, è necessario eseguire la seguente istruzione SQL:

ALTER TABLE nome_tabella ENABLE ROW LEVEL SECURITY;

Una volta abilitato Row Level Security, è possibile creare regole che decidono quando un utente può vedere certe righe. Ad esempio, supponiamo di avere una tabella chiamata dipendenti con colonne id, nome, dipartimento e stipendio. Vogliamo garantire che i dipendenti possano visualizzare solo le proprie informazioni sul salario. Ecco come possiamo creare una politica per raggiungere questo obiettivo:

CREATE POLICY politica_stipendi_dipendenti ON dipendenti
FOR SELECT
TO PUBLIC
USING (current_user = name);

In questo esempio, stiamo creando una politica chiamata politica_stipendi_dipendenti per la tabella dipendenti. Consente agli utenti di selezionare righe solo se l’utente corrente coincide con il valore nella colonna nome. Questo garantisce che i dipendenti possano visualizzare solo le proprie informazioni sullo stipendio.

SQL Server

SQL Server implementa Row Level Security tramite l’uso di predicati di sicurezza. I predicati di sicurezza sono espressioni T-SQL che definiscono le condizioni in base alle quali un utente può accedere a specifiche righe. Per impostare Row Level Security in SQL Server, si crea una politica di sicurezza e la si collega a una tabella.

Ecco un esempio di creazione di una politica di sicurezza per la tabella dipendenti:

CREATE SECURITY POLICY politica_dipendenti
ADD FILTER PREDICATE dbo.fn_predicatodisucria(department) ON dbo.dipendenti
WITH (STATE = ON);

In questo esempio, stiamo creando una politica di sicurezza chiamata politica_dipendenti. Utilizziamo una funzione chiamata fn_predicatodisucria per aggiungere una regola filtro. Questa funzione controlla la colonna dipartimento e decide se l’utente può accedere alla riga, restituendo un valore vero o falso.

La funzione fn_predicatodisucria può essere come segue:

CREATE FUNCTION fn_predicatodisucria(@department varchar(100))
RETURNS TABLE
WITH SCHEMABINDING
AS
RETURN SELECT 1 AS fn_predicatodisucria_result
WHERE @department = USER_NAME() OR USER_NAME() = 'admin';

Questa funzione consente agli utenti di vedere le righe solo se il loro nome utente corrisponde alla colonna dipartimento o se sono ‘admin’.

Esempio Dettagliato per PostgreSQL

Tabella di Test

Consideriamo un esempio per capire come funziona Row Level Security nella pratica. Supponiamo di avere una tabella chiamata ordini con la seguente struttura:

CREATE TABLE ordini (
id INT PRIMARY KEY,
customer_id INT,
prodotto VARCHAR(100),
quantità INT,
prezzo DECIMAL(10, 2)
);

Configurazione della Politica di Sicurezza

Vogliamo garantire che i clienti possano vedere solo i propri ordini. Ecco come possiamo implementare Row Level Security in PostgreSQL:

1. Abilitare Row Level Security per la tabella ordini:

ALTER TABLE ordini ENABLE ROW LEVEL SECURITY;

2. Creare una politica che restringe l’accesso basato sulla colonna customer_id:

CREATE POLICY politica_ordini_utenti ON ordini
FOR SELECT
TO PUBLIC
USING (customer_id = current_user_id());

In questo esempio, la funzione current_user_id() restituisce l’ID del cliente attualmente connesso.

Accesso

Ora, quando un cliente interroga la tabella ordini, vedrà solo le righe in cui il customer_id corrisponde al proprio ID. Ad esempio:

SELECT * FROM ordini;

Risultato per il Cliente 1:

id | customer_id | prodotto  | quantità | prezzo
---+-------------+----------+----------+-------
1  | 1           | Prodotto A| 10       | 100.00
3  | 1           | Prodotto C| 5        | 250.00

Risultato per il Cliente 2:

id | customer_id | prodotto  | quantità | prezzo
---+-------------+----------+----------+-------
2  | 2           | Prodotto B| 20       | 200.00
4  | 2           | Prodotto D| 15       | 300.00

Come si può vedere, ogni cliente può visualizzare solo i propri ordini, garantendo la privacy e la sicurezza dei dati.

Oltre l’Esempio

Oltre a PostgreSQL e SQL Server, diversi altri sistemi di database offrono funzionalità di RLS. Ecco alcuni esempi notevoli:

Oracle Database

  • Oracle Database supporta RLS attraverso la funzionalità Virtual Private Database (VPD).
  • VPD consente di creare politiche di sicurezza che applicano il controllo di accesso a livello di riga basato su condizioni definite dall’utente.
  • Le politiche sono definite utilizzando funzioni PL/SQL e sono applicate in modo trasparente alle query SQL che accedono alle tabelle protette.

MySQL

  • MySQL fornisce RLS tramite l’uso di viste e della clausola DEFINER.
  • È possibile creare viste che includono condizioni a livello di riga specifiche e concedere l’accesso a quelle viste anziché alle tabelle sottostanti.
  • La clausola DEFINER consente di specificare il contesto di sicurezza in cui viene eseguita la vista, garantendo che gli utenti possano accedere solo alle righe autorizzate.

IBM Db2

  • IBM Db2 implementa Row Level Security tramite l’uso di Row and Column Access Control (RCAC).
  • RCAC consente di definire autorizzazioni sulle righe e maschere sulle colonne per controllare l’accesso a specifiche righe e colonne all’interno di una tabella.
  • Le autorizzazioni sulle righe sono definite utilizzando espressioni SQL che determinano le condizioni in base alle quali un utente può accedere a una riga.
  • Le maschere sulle colonne sono utilizzate per controllare la visibilità e la modifica di specifiche colonne, basate su regole definite dall’utente.

SAP HANA

  • SAP HANA supporta RLS tramite l’uso di privilegi analitici e controllo di accesso a livello di riga.
  • I privilegi analitici consentono di definire politiche di controllo di accesso basate sui ruoli degli utenti e altri attributi.
  • Il controllo di accesso a livello di riga consente di restringere l’accesso a specifiche righe all’interno di una tabella basato su condizioni definite dall’utente.
  • Queste funzionalità di sicurezza possono essere implementate utilizzando istruzioni SQL e definizioni di politiche di sicurezza.

Amazon Redshift

  • Amazon Redshift, un servizio di data warehousing basato su Cloud, fornisce RLS tramite l’uso di politiche di controllo di accesso a livello di riga.
  • È possibile definire politiche che limitano l’accesso a specifiche righe basato su ruoli degli utenti, classificazioni dei dati o altri criteri.
  • Le politiche sono create utilizzando istruzioni SQL e vengono applicate in modo trasparente alle query che accedono alle tabelle protette.

Questi sono solo alcuni esempi di sistemi di database che supportano RLS. Ogni sistema di database può avere la propria specifica implementazione e sintassi per la configurazione e la gestione delle politiche di RLS.

Conclusione

Row Level Security è una funzionalità che consente agli amministratori di database di controllare l’accesso alle singole righe all’interno di una tabella. Aiuta a garantire che gli utenti possano accedere solo ai dati che sono autorizzati a vedere. RLS protegge le informazioni sensibili dall’accesso non autorizzato.

Questo articolo copre i fondamenti del RLS. Confronta anche come è possibile implementare RLS in PostgreSQL e SQL Server. Forniamo esempi per mostrare come limita l’accesso in base ai ruoli degli utenti o ad altri fattori.

Implementare Row Level Security è cruciale per mantenere la privacy dei dati e rispettare varie normative. Aggiunge un ulteriore livello di sicurezza al tuo database, offrendo un controllo preciso sull’accesso ai dati.

DataSunrise offre strumenti di sicurezza di alto livello per i database, inclusi funzionalità per la sicurezza, regole di audit, mascheramento, e conformità. La nostra funzionalità di Row Level Security si distingue, permettendo di impostare controlli di accesso dettagliati a livello di riga.

Se desidera saperne di più sulle soluzioni di sicurezza di DataSunrise, contatti il nostro team per una demo online. Saremo lieti di dimostrare i nostri potenti strumenti di sicurezza e discutere su come proteggono i Suoi dati.

Ricordi, la sicurezza dei dati è cruciale al giorno d’oggi. Con Row Level Security e l’esperienza di aziende come DataSunrise, può proteggere la riservatezza e l’integrità del Suo database, fornendo l’accesso solo quando necessario.

Successivo

Conformità dei Dati: Elementi Essenziali

Conformità dei Dati: Elementi Essenziali

Scopri di più

Ha bisogno del nostro team di supporto?

I nostri esperti saranno lieti di rispondere alle Sue domande.

Informazioni generali:
[email protected]
Servizio clienti e supporto tecnico:
support.datasunrise.com
Richieste di collaborazione e alleanza:
[email protected]