Locais externos
Aplica-se a: Databricks SQL
Databricks Runtime
Unity Catalog somente
O Catalog do Unity e o metastore Hive do Azure Databricks incorporado usam locais padrões para tables gerenciadas. O Catalog do Unity apresenta vários novos objetos protegíveis para grant privilégios aos dados no armazenamento de objetos na nuvem.
-
Um objeto de Catalog do Unity usado para abstrair credentials de longo prazo do armazenamento em nuvem providers.
-
Um objeto Catalog do Unity usado para associar um URI de armazenamento de objetos de nuvem a uma credencial de armazenamento .
-
Um Catalogtable do Unity criado em um local externo gerenciado pelo Catalog do Unity.
Local externo
Um local externo é um objeto protegível que combina um caminho de armazenamento com uma credencial de armazenamento que autoriza o acesso a esse caminho.
O criador de um local externo é seu proprietário inicial. O proprietário de um local externo e usuários com privilégios de MANAGE
pode modificar o nome, a URI e a credencial de armazenamento do local externo.
Após um local externo ser criado, você pode grant acesso a ele para entidade de segurança (usuários e grupos) com nível de conta.
Um usuário ou grupo com permissão para usar um local externo pode acessar qualquer caminho de armazenamento no caminho do local sem acesso direto à credencial de armazenamento.
Para refinar ainda mais o controle de acesso, você pode usar GRANT em tables externos para encapsular o acesso a arquivos individuais em um local externo.
Nomes de locais externos não são qualificados e devem ser exclusivos no metastore.
O caminho de armazenamento de qualquer local externo não pode ser contido no caminho de armazenamento de outro local externo ou em um caminho de armazenamento de tableexterno usando uma credencial de armazenamento explícita.
Aviso
Se um schema (banco de dados) estiver registrado no metastore do Hive no nível de espaço de trabalho, a remoção desse schema com a opção CASCADE
fará com que todos os arquivos naquela localização schema sejam excluídos de forma recursiva, independentemente do tipo table (gerenciado ou externo).
Se o schema estiver registrado em um metastore do Catalog do Unity, os arquivos das tables gerenciadas do Catalog do Unity serão excluídos recursivamente. No entanto, os arquivos de tables externas não serão excluídos. Você deve gerenciar esses arquivos usando diretamente o provedor de armazenamento em nuvem.
Portanto, para evitar perda acidental de dados, você nunca deve registrar um schema em um metastore do Hive em um local com dados existentes. Você também não deve criar tables externas em um local gerenciado por esquemas de metastore do Hive nem que contenha tables gerenciadas do Catalog do Unity.
Representação gráfica de relacionamentos
O diagrama a seguir mostra o relacionamento entre:
- Armazenamento credentials
- locais externos
- Externo tables
- caminhos de armazenamento
- entidades IAM
- contas de serviço do Azure
Exemplos
-- 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