Posizione esterna
Si applica solo a:Databricks SQL Databricks Runtime Unity Catalog
Il catalogo unity e il metastore Hive di Azure Databricks incorporato usano percorsi predefiniti per le tabelle gestite. Unity Catalog introduce diversi nuovi oggetti a protezione diretta per concedere privilegi ai dati nell'archiviazione di oggetti cloud.
-
Oggetto Catalog di Unity usato per astrarre le credenziali a lungo termine dai provider di archiviazione cloud.
-
Oggetto Catalog di Unity usato per associare un URI di archiviazione di oggetti cloud a una credenziale di archiviazione.
-
Tabella del catalogo Unity creata in una posizione esterna gestita dal catalogo unity.
Posizione esterna
Un percorso esterno è un oggetto a protezione diretta che combina un percorso di archiviazione con credenziali di archiviazione che autorizza l'accesso a tale percorso.
L'autore di una posizione esterna è il proprietario iniziale. Il proprietario e gli utenti di una posizione esterna con il privilegio MANAGE
possono modificare il nome, l'URI e le credenziali di archiviazione della posizione esterna.
Dopo aver creato una posizione esterna, è possibile concedere l'accesso a tale percorso alle entità a livello di account (utenti e gruppi).
Un utente o un gruppo con l'autorizzazione per l'uso di una posizione esterna può accedere a qualsiasi percorso di archiviazione all'interno del percorso della posizione senza accesso diretto alle credenziali di archiviazione.
Per perfezionare ulteriormente il controllo di accesso, è possibile usare GRANT nelle tabelle esterne per incapsulare l'accesso ai singoli file all'interno di un percorso esterno.
I nomi di posizione esterni non sono qualificati e devono essere univoci all'interno del metastore.
Il percorso di archiviazione di qualsiasi posizione esterna non può essere contenuto all'interno del percorso di archiviazione di un'altra posizione esterna o all'interno del percorso di archiviazione di una tabella esterna usando credenziali di archiviazione esplicite.
Avviso
Se uno schema (database) viene registrato nel metastore Hive a livello di area di lavoro, l'eliminazione dello schema tramite l'opzione CASCADE
determina l'eliminazione ricorsiva di tutti i file nel percorso dello schema, indipendentemente dal tipo di tabella (gestito o esterno).
Se lo schema viene registrato in un metastore di Unity Catalog, i file per le tabelle gestite di Unity Catalog vengono eliminati in modo ricorsivo. Tuttavia, i file per le tabelle esterne non vengono eliminati. È necessario gestire questi file usando direttamente il provider di archiviazione cloud.
Pertanto, per evitare perdite accidentali di dati, è consigliabile non registrare mai uno schema in un metastore Hive in una posizione con dati esistenti. Né è consigliabile creare nuove tabelle esterne in una posizione gestita dagli schemi del metastore Hive o contenere tabelle gestite da Unity Catalog.
Rappresentazione grafica delle relazioni
Il diagramma seguente descrive la relazione tra:
- credenziali di archiviazione
- posizioni esterne
- tabelle esterne
- percorsi di archiviazione
- Entità IAM
- Account del servizio di Azure
Esempi
-- Grant `finance` user permission to create external location on `my_azure_storage_cred` storage credential, and then create an external location on the specific path to which `my_azure_storage_cred` has access
> GRANT CREATE EXTERNAL LOCATION ON STORAGE CREDENTIAL `my_azure_storage_cred` TO `finance`
> CREATE EXTERNAL LOCATION `finance_loc` URL 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance'
WITH (CREDENTIAL `my_azure_storage_cred`)
COMMENT 'finance';
-- Grant read, write, and create table access to the finance location to `finance` user
> GRANT READ FILES, WRITE FILES, CREATE EXTERNAL TABLE ON EXTERNAL LOCATION `finance_loc` TO `finance`;
-- `finance` can read from any storage path under abfss://depts/finance but nowhere else
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/finance` WITH (CREDENTIAL my_azure_storage_cred);
100
> SELECT count(1) FROM `delta`.`abfss://container@storageaccount.dfs.core.windows.net/depts/hr/employees` WITH (CREDENTIAL my_azure_storage_cred);
Error
-- `finance` can create an external table over specific object within the `finance_loc` location
> CREATE TABLE main.default.sec_filings LOCATION 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings';
-- Cannot list files under an external table with a user that doesn't have SELECT permission on it
> LIST 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings'
Error
> LIST 'abfss://container@storageaccount.dfs.core.windows.net/depts/finance/sec_filings/_delta_log'
Error