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

Sicurezza a Livello di Riga

Sicurezza a Livello di Riga

Row Level Security

Nell’odierna realtà orientata ai dati, proteggere le informazioni sensibili è di massima importanza. I database contengono moltissimi dati ed è fondamentale assicurarsi che solo le persone giuste possano accedere a determinate parti di essi. Questo è il campo in cui entra in gioco la Sicurezza a Livello di Riga (RLS).

La Sicurezza a Livello di Riga è una funzione potente che permette agli amministratori del database di controllare l’accesso alle singole righe. Il controllo dipende dai ruoli degli utenti, dai permessi o da altri criteri. Questo articolo coprirà le basi della Sicurezza a Livello di Riga. Esamineremo come funziona in vari database e utilizzeremo esempi per mostrarne l’uso.

Che Cos’è la Sicurezza a Livello di Riga?

La Sicurezza a Livello di Riga limita l’accesso a determinate righe in un database basandosi su condizioni specifiche. Dà un controllo preciso su chi può vedere o modificare i dati, garantendo che gli utenti interagiscano solo con le righe autorizzate. Questo è particolarmente importante in scenari dove una tabella contiene informazioni sensibili, come dati personali, registrazioni finanziarie, o dettagli riservati di una azienda.

La Sicurezza a Livello di Riga 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ò vedere in base a fattori come il ruolo o il dipartimento.

Implementazione di RLS

Diversi sistemi di database offrono vari meccanismi per implementare la Sicurezza a Livello di Riga. Vediamo come funziona la Sicurezza a Livello di Riga in PostgreSQL e SQL Server.

PostgreSQL

PostgreSQL fornisce una funzione chiamata Sicurezza a Livello di Riga. Permette di definire politiche per controllare l’accesso alle singole righe. Per abilitare RLS per una tabella, è necessario eseguire il seguente comando SQL:

ALTER TABLE table_name ENABLE ROW LEVEL SECURITY;

Una volta attivata la Sicurezza a Livello di Riga, è possibile creare delle regole che decidono quando un utente può vedere determinate righe. Ad esempio, supponiamo di avere una tabella chiamata employees con colonne id, name, department e salary. Vogliamo garantire che i dipendenti possano vedere solo le informazioni sul loro stipendio. Ecco come possiamo creare una politica per raggiungere questo obiettivo:

CREATE POLICY employee_salary_policy ON employees
FOR SELECT
TO PUBLIC
USING (current_user = name);

In questo esempio, stiamo creando una politica chiamata employee_salary_policy per la tabella employees. Permette agli utenti di selezionare righe solo se current_user corrisponde al valore nella colonna name. Questo assicura che i dipendenti possano vedere solo le informazioni sul proprio stipendio.

SQL Server

SQL Server implementa la Sicurezza a Livello di Riga attraverso 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 righe specifiche. Per configurare la Sicurezza a Livello di Riga in SQL Server, è necessario creare una politica di sicurezza e associarla a una tabella.

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

CREATE SECURITY POLICY employee_policy
ADD FILTER PREDICATE dbo.fn_securitypredicate(department) ON dbo.employees
WITH (STATE = ON);

In questo esempio, stiamo creando una politica di sicurezza chiamata employee_policy. Stiamo utilizzando una funzione chiamata fn_securitypredicate per aggiungere una regola di filtro. Questa funzione controlla la colonna department e decide se l’utente può accedere alla riga, restituendo una risposta true o false.

La funzione fn_securitypredicate può essere la seguente:

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

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

Esempio Dettagliato per PostgreSQL

Tabella di Test

Consideriamo un esempio per comprendere come funziona la Sicurezza a Livello di Riga nella pratica. Supponiamo di avere una tabella chiamata orders con la seguente struttura:

CREATE TABLE orders (
id INT PRIMARY KEY,
customer_id INT,
product VARCHAR(100),
quantity INT,
price DECIMAL(10, 2)
);

Configurazione della Politica di Sicurezza

Vogliamo garantire che i clienti possano vedere solo i propri ordini. Ecco come possiamo implementare la Sicurezza a Livello di Riga in PostgreSQL:

1. Abilitare la Sicurezza a Livello di Riga per la tabella orders:

ALTER TABLE orders ENABLE ROW LEVEL SECURITY;

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

CREATE POLICY customer_orders_policy ON orders
FOR SELECT
TO PUBLIC
USING (customer_id = current_user_id());

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

Accesso

Ora, quando un cliente esegue una query sulla tabella orders, vedrà solo le righe dove la colonna customer_id corrisponde al proprio ID. Per esempio:

SELECT * FROM orders;

Risultato per il Cliente 1:

id | customer_id | product  | quantity | price
---+-------------+----------+----------+-------
1  | 1           | Product A| 10       | 100.00
3  | 1           | Product C| 5        | 250.00

Risultato per il Cliente 2:

id | customer_id | product  | quantity | price
---+-------------+----------+----------+-------
2  | 2           | Product B| 20       | 200.00
4  | 2           | Product D| 15       | 300.00

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

Oltre all’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 funzione Virtual Private Database (VPD).
  • VPD consente di creare politiche di sicurezza che imporre il controllo dell’accesso a livello di riga in base a 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 attraverso l’uso di viste e la clausola DEFINER.
  • È possibile creare viste che includono condizioni specifiche a livello di riga e concedere l’accesso a quelle viste invece che alle tabelle sottostanti.
  • La clausola DEFINER consente di specificare il contesto di sicurezza in cui viene eseguita la vista, assicurando che gli utenti possano accedere solo alle righe che sono autorizzati a vedere.

IBM Db2

  • IBM Db2 implementa la Sicurezza a Livello di Riga attraverso l’uso di Controllo di Accesso a Righe e Colonne (RCAC).
  • RCAC consente di definire permessi sulle righe e maschere sulle colonne per controllare l’accesso a righe e colonne specifiche all’interno di una tabella.
  • I permessi sulle righe sono definiti 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 colonne specifiche basate su regole definite dall’utente.

SAP HANA

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

Amazon Redshift

  • Amazon Redshift, un servizio di data warehousing basato su cloud, fornisce RLS attraverso l’uso di politiche di accesso a livello di riga.
  • È possibile definire politiche che limitano l’accesso a righe specifiche in base a ruoli degli utenti, classificazioni dei dati o altri criteri.
  • Le politiche sono create utilizzando istruzioni SQL e sono applicate trasparentemente 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 implementazione specifica e sintassi per configurare e gestire le politiche di RLS.

Conclusione

La Sicurezza a Livello di Riga è una funzionalità che permette 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 visualizzare. RLS protegge le informazioni sensibili da accessi non autorizzati.

Questo articolo copre i fondamenti della RLS. Inoltre, confronta come è possibile implementare la RLS in PostgreSQL e SQL Server. Forniamo esempi per mostrare come limita l’accesso in base a ruoli degli utenti o altri fattori.

Implementare la Sicurezza a Livello di Riga è fondamentale per mantenere la privacy dei dati e conformarsi a varie normative. Aggiunge un ulteriore livello di sicurezza al tuo database, offrendo un controllo granulare sull’accesso ai dati.

DataSunrise offre strumenti di sicurezza di prima classe per i database, inclusi funzionalità per la sicurezza, regole di audit, mascheramento e conformità. La nostra funzionalità di Sicurezza a Livello di Riga si distingue, permettendoti 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 robusti strumenti di sicurezza e discutere su come proteggono i tuoi dati.

Ricorda, la sicurezza dei dati è cruciale al giorno d’oggi. Con la Sicurezza a Livello di Riga e l’esperienza di aziende come DataSunrise, può proteggere la riservatezza e l’integrità del suo database concedendo accessi secondo necessità.

Successivo

Conformità dei Dati: Prerequisite

Conformità dei Dati: Prerequisite

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]