Sicurezza a livello di riga in OneLake

La sicurezza a livello di riga è una funzionalità di sicurezza OneLake che consente di definire restrizioni dei dati a livello di riga per i dati tabulari archiviati in OneLake. Gli utenti possono definire ruoli in OneLake che contengono regole per filtrare le righe di dati per i membri di tale ruolo. Quando un membro di un ruolo RLS passa a eseguire query sui dati, le regole RLS vengono valutate e vengono restituite solo le righe consentite. Le regole di sicurezza a livello di riga definite in OneLake vengono applicate in modo coerente tra i motori Fabric e i motori autorizzati di terze parti tramite le API OneLake, assicurando che venga applicata una singola definizione di politica indipendentemente dal motore di query.

Prerequisiti

Informazioni sulla sicurezza a livello di riga

La RLS di OneLake viene applicata in uno dei due modi:

  • Tabelle filtrate nei motori Fabric: Le query all'elenco dei motori Fabric supportati, come i notebook Spark, fanno sì che l'utente veda solo le righe che è autorizzato a vedere in base alle regole RLS.
  • Accesso bloccato alle tabelle: Le tabelle con regole RLS applicate non possono essere lette se non tramite motori Fabric supportati o motori di terze parti autorizzati che applicano la sicurezza di OneLake. L'accesso viene bloccato per i motori non autorizzati.

Per le tabelle filtrate, si applicano i comportamenti seguenti:

  • Le regole RLS (sicurezza a livello di riga) non limitano l'accesso per gli utenti nei ruoli di Amministratore, Membro e Collaboratore.
  • Se la regola di RLS presenta una mancata corrispondenza con la tabella su cui è definita, la query fallisce e non viene restituita alcuna riga. Ad esempio, se la regola RLS fa riferimento a una colonna che non fa parte della tabella.
  • Le query delle tabelle RLS falliscono con un errore se un utente fa parte di due ruoli diversi e uno di questi ruoli ha una sicurezza a livello di colonna (CLS).
  • Le regole di sicurezza a livello di riga possono essere applicate solo per gli oggetti che sono tabelle Delta Parquet.
    • Le regole di sicurezza a livello di riga applicate agli oggetti di tabella non Delta bloccano l'accesso all'intera tabella per i membri del ruolo.
  • L'accesso a una tabella potrebbe essere bloccato se l'istruzione RLS contiene errori di sintassi che impediscono la valutazione.

Accedere ai dati dai motori autorizzati

Motori di Fabric supportati possono accedere alle tabelle con regole di sicurezza a livello di riga (RLS) applicate.

Tip

I motori di terze parti autorizzati possono recuperare definizioni di accesso efficaci, inclusi i predicati RLS, tramite le API del motore autorizzate. OneLake restituisce l'accesso effettivo indipendente dal motore e precomputato per l'utente richiedente e il motore autorizzato applica i criteri in fase di query. OneLake rimane l'unica fonte di verità per i criteri di sicurezza.

Per altre informazioni, vedere Integrare un motore di terze parti con la sicurezza di OneLake.

Definire regole di sicurezza a livello di riga

È possibile definire regole di sicurezza a livello di riga come parte di qualsiasi ruolo di sicurezza OneLake che concede l'accesso ai dati in formato Delta Parquet della tabella. Le righe sono un concetto rilevante solo per i dati tabulari, pertanto le definizioni di sicurezza a livello di riga (RLS) non sono consentite per cartelle non tabellari o dati non strutturati.

Le regole RLS utilizzano la sintassi SQL per specificare le righe che un utente può visualizzare. Questa sintassi assume la forma di un'istruzione SQL SELECT con le regole RLS definite nella clausola WHERE. Le regole RLS supportano solo un sottoinsieme del linguaggio SQL come definito nelle regole di sintassi. Le query con sintassi RLS non valida o sintassi RLS che non corrisponde alla tabella sottostante non restituiscono alcuna riga agli utenti, o generano errori di query nell'endpoint di analisi SQL.

Come buona prassi, evitare di utilizzare espressioni RLS vaghe o eccessivamente complesse. Le espressioni fortemente tipate con ricerca di numeri interi o stringhe con "=" saranno le più sicure e facili da comprendere.

Per definire le regole di sicurezza a livello di riga (RLS), seguire questa procedura:

  1. Passare a Lakehouse e selezionare Gestisci sicurezza OneLake.

  2. Selezionare un ruolo esistente per cui si vuole definire la sicurezza della tabella o della cartella oppure selezionare Nuovo per creare un nuovo ruolo.

  3. Nella pagina dei dettagli del ruolo selezionare altre opzioni (...) accanto alla tabella per cui si vuole definire la sicurezza a livello di riga e quindi selezionare Sicurezza riga.

    Screenshot che mostra la selezione di

  4. Digitare l'istruzione SQL per definire le righe che gli utenti devono visualizzare nell'editor di codice. Per indicazioni, usare la sezione Regole di sintassi .

  5. Selezionare Salva per confermare le regole di sicurezza delle righe.

Regole della sintassi

Tutte le regole di sicurezza a livello di riga hanno il formato seguente:

SELECT * FROM {schema_name}.{table_name} WHERE {column_level_boolean_1}{column_level_boolean_2}...{column_level_boolean_N}

Per esempio:

SELECT * FROM Sales WHERE Amount>'50000' AND State='CA'

Il numero massimo di caratteri in una regola di sicurezza a livello di riga è 1000.

Segnaposto Descrizione
{schema_name} Nome dello schema in cui si trova {table_name}. Se l'artefatto supporta gli schemi, è necessario {schema_name}.
{table_name} Nome della tabella a cui viene applicato il predicato di sicurezza a livello di riga (RLS). Questo valore deve corrispondere esattamente al nome della tabella, altrimenti la sicurezza a livello di riga non mostrerà alcuna riga.
{column_level_boolean} Istruzione booleana contenente i componenti seguenti:

* Nome colonna: nome di una colonna in {table_name} come specificato nello schema del log Delta. I nomi delle colonne possono essere formattati come {column_name} o {table_name}. {column_name}.
* Operatore: uno degli operatori supportati che valuta il nome e il valore della colonna in un valore booleano.
* Valore: valore statico o set di valori da valutare.

È possibile avere una o più istruzioni booleane separate da AND o OR.

Operatori supportati

Le regole di sicurezza a livello di riga supportano l'elenco seguente di operatori e parole chiave:

Operatore Descrizione
= (uguale) Valuta come vero se i due valori sono dello stesso tipo di dati e sono perfettamente uguali.
<> (non uguale a) Restituisce "true" se i due valori non sono dello stesso tipo di dati e non sono esattamente identici.
> (maggiore di) Valuta a true se il valore della colonna è maggiore del valore di confronto. Per i valori stringa, questo operatore usa il confronto bit per bit per determinare se una stringa è maggiore dell'altra.
>= (maggiore o uguale a) Restituisce vero se il valore della colonna è maggiore o uguale al valore di confronto. Per i valori stringa, questo operatore usa un confronto bit per bit per determinare se una stringa è maggiore o uguale all'altra.
< (minore di) Restituisce vero se il valore della colonna è minore del valore di valutazione. Per i valori stringa, questo operatore usa un confronto bit per bit per determinare se una stringa è minore dell'altra.
<= (minore o uguale a) Valuta come vero se il valore della colonna è minore o uguale al valore del confronto. Per i valori stringa, questo operatore usa il confronto bit per bit per determinare se una stringa è minore o uguale all'altra.
IN Restituisce "true" se uno dei valori di confronto è dello stesso tipo di dati e corrisponde esattamente al valore della colonna.
NON Restituisce true se uno dei valori di valutazione non è lo stesso tipo di dati o non corrisponde esattamente al valore della colonna.
E Combina l'istruzione precedente e l'istruzione successiva usando un'operazione AND booleana. Entrambe le affermazioni devono essere vere affinché l'intero predicato sia vero.
O Combina l'istruzione precedente e l'istruzione successiva usando un'operazione OR booleana. Una delle affermazioni deve essere vera affinché l'intero predicato sia vero.
Vero Espressione booleana per vero.
Falso Espressione booleana per "false".
VUOTO Tipo di dati vuoto, che può essere usato con l'operatore IS. Ad esempio: row IS BLANK.
NULLO Tipo di dati Null, che può essere usato con l'operatore IS. Ad esempio: row IS NULL.

Combinare la sicurezza a livello di riga e a livello di colonna

La sicurezza a livello di riga e a livello di colonna può essere usata insieme per limitare l'accesso utente a una tabella. Tuttavia, i due criteri devono essere applicati usando un singolo ruolo di sicurezza OneLake. In questo scenario, l'accesso ai dati è limitato in base alle regole impostate in un ruolo.

La sicurezza di OneLake non supporta la combinazione di due o più ruoli in cui uno contiene regole di sicurezza a livello di riga (RLS) e un altro contiene regole di sicurezza a livello di colonna (CLS). Gli utenti che tentano di accedere alle tabelle che fanno parte di una combinazione di ruoli non supportata ricevono degli errori di query.