Filtri di dati in Lake Formation - AWS Lake Formation

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Filtri di dati in Lake Formation

Puoi implementare la sicurezza a livello di colonna, riga e cella tramite la creazione di filtri di dati. Seleziona un filtro dati quando concedi l'autorizzazione SELECT Lake Formation sulle tabelle. Se la tabella contiene strutture di colonne nidificate, è possibile definire un filtro dati includendo o escludendo le colonne secondarie e definire espressioni di filtro a livello di riga sugli attributi nidificati.

Ogni filtro di dati appartiene a una tabella specifica del Data Catalog. Un filtro dati include le seguenti informazioni:

  • Nome del filtro

  • Gli ID del catalogo della tabella associata al filtro

  • Nome tabella

  • Nome del database che contiene la tabella

  • Specificazione delle colonne: un elenco di colonne e colonne annidate (con struct tipi di dati) da includere o escludere nei risultati della query.

  • Espressione di filtro di riga: un'espressione che specifica le righe da includere nei risultati della query. Con alcune restrizioni, l'espressione ha la sintassi di una WHERE clausola nel linguaggio PartiQL. Per specificare tutte le righe, scegli Accesso a tutte le righe in Accesso a livello di riga nella console o Utilizza nelle chiamate API. AllRowsWildcard

    Per ulteriori informazioni su ciò che è supportato nelle espressioni di filtro di riga, consulta. Supporto PartiQL nelle espressioni di filtro di riga

Il livello di filtraggio ottenuto dipende da come si popola il filtro dati.

  • Quando specifichi il carattere jolly "tutte le colonne" e fornisci un'espressione di filtro di riga, stabilisci solo la sicurezza a livello di riga (filtraggio di riga).

  • Quando si includono o si escludono colonne specifiche e colonne nidificate e si specifica «tutte le righe» utilizzando il carattere jolly per tutte le righe, si stabilisce solo la sicurezza a livello di colonna (filtraggio delle colonne).

  • Quando includi o escludi colonne specifiche e fornisci anche un'espressione di filtro di riga, stabilisci la sicurezza a livello di cella (filtraggio delle celle).

La seguente schermata della console Lake Formation mostra un filtro dati che esegue il filtraggio a livello di cella. Per le interrogazioni sulla orders tabella, limita l'accesso alla customer_name colonna e i risultati della query restituiscono solo le righe in cui la colonna contiene «pharma». product_type

La finestra del filtro dei dati contiene i seguenti campi, disposti verticalmente: Nome del filtro dati; Database di destinazione; Tabella di destinazione; Gruppo di pulsanti di opzione con le opzioni Accesso a tutte le colonne, Includi colonne ed Escludi colonne; Seleziona colonne (elenco a discesa); Espressione del filtro di riga (casella di testo multilinea). L'opzione Escludi colonne è selezionata, la colonna customer_name è selezionata per l'esclusione e il campo di espressione del filtro Row contiene. 'product_type='pharma'

Nota l'uso di virgolette singole per racchiudere la stringa letterale,. 'pharma'

Puoi utilizzare la console Lake Formation per creare questo filtro di dati oppure puoi fornire il seguente oggetto di richiesta all'operazione CreateDataCellsFilter API.

{ "Name": "restrict-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type='pharma'"}, "ColumnWildcard": { "ExcludedColumnNames": ["customer_name"] } }

Puoi creare tutti i filtri di dati di cui hai bisogno per una tabella. A tal fine, è necessaria l'SELECTautorizzazione con l'opzione di concessione su una tabella. Per impostazione predefinita, gli amministratori di Data Lake dispongono dell'autorizzazione per creare filtri di dati su tutte le tabelle di quell'account. In genere si utilizza solo un sottoinsieme dei possibili filtri di dati quando si concedono le autorizzazioni sulla tabella a un responsabile. Ad esempio, è possibile creare un secondo filtro di dati per la orders tabella che è un row-security-only filtro di dati. Facendo riferimento alla schermata precedente, è possibile scegliere l'opzione Accesso a tutte le colonne e includere un'espressione di filtro di riga di. product_type<>pharma Il nome di questo filtro di dati potrebbe essere. no-pharma Limita l'accesso a tutte le righe la cui product_type colonna è impostata su «pharma».

L'oggetto di richiesta per l'operazione CreateDataCellsFilter API per questo filtro di dati è il seguente.

{ "Name": "no-pharma", "DatabaseName": "sales", "TableName": "orders", "TableCatalogId": "111122223333", "RowFilter": {"FilterExpression": "product_type<>'pharma'"}, "ColumnNames": ["customer_id", "customer_name", "order_num" "product_id", "purchase_date", "product_type", "product_manufacturer", "quantity", "price"] }

È quindi possibile concedere la licenza SELECT sulla orders tabella con il filtro restrict-pharma dati a un utente amministrativo e SELECT sulla orders tabella con il filtro no-pharma dati a utenti non amministrativi. Agli utenti del settore sanitario, potresti SELECT concedere alla orders tabella l'accesso completo a tutte le righe e le colonne (nessun filtro per i dati) o magari aggiungere un altro filtro di dati che limiti l'accesso alle informazioni sui prezzi.

È possibile includere o escludere colonne annidate quando si specifica la sicurezza a livello di colonna e di riga all'interno di un filtro dati. Nell'esempio seguente, l'accesso al product.offer campo viene specificato utilizzando nomi di colonna qualificati (racchiusi tra virgolette doppie). Questo è importante per i campi annidati per evitare che si verifichino errori quando i nomi delle colonne contengono caratteri speciali e per mantenere la compatibilità con le versioni precedenti delle definizioni di sicurezza a livello di colonna.

{ "Name": "example_dcf", "DatabaseName": "example_db", "TableName": "example_table", "TableCatalogId": "111122223333", "RowFilter": { "FilterExpression": "customer.customerName <> 'John'" }, "ColumnNames": ["customer", "\"product\".\"offer\""] }