Isenção de responsabilidade: Todas as opiniões e visões expressas no blog pertencem exclusivamente ao autor e não necessariamente ao empregador do autor ou a qualquer outro grupo ou indivíduo. Este artigo é não uma promoção para qualquer plataforma de gerenciamento de nuvem/dados. Todas as imagens e trechos de código estão disponíveis publicamente no site da Azure/Databricks.
Em meus outros artigos no DZone, discuti o que é Databricks Unity Catalog, como o modelo de privilégios funciona no Unity Catalog, nível de esquema, e um script para automatizar a gestão de permissões tanto no nível do catálogo quanto no nível do esquema.
Neste artigo, meu objetivo é fornecer o script que automatizará a gestão de permissões no nível da tabela do Unity Catalog.
Privilégios no Nível da Tabela do Unity Catalog
No Unity Catalog (Databricks), aplicar permissões no nível da tabela é necessário quando você deseja controlar o acesso a tabelas ou visualizações específicas, em vez de aplicar permissões a todos os objetos dentro de um esquema. As permissões no nível da tabela são úteis nos seguintes cenários:
1. Controle de Acesso Granular
Quando você precisa conceder ou restringir o acesso a tabelas ou visualizações específicas sem afetar todo o esquema.
Isso é especialmente importante quando um esquema contém dados sensíveis e você deseja permitir o acesso a algumas tabelas enquanto limita o acesso a outras.
2. Protegendo Dados Sensíveis
Se certas tabelas dentro de um esquema contêm dados confidenciais ou restritos (por exemplo, informações pessoalmente identificáveis, dados financeiros), você pode aplicar permissões ao nível da tabela para garantir que apenas usuários autorizados possam visualizar ou consultar essas tabelas.
Por exemplo, você pode permitir o acesso a algumas tabelas de dados resumidos ou agregados, mas restringir o acesso a tabelas detalhadas e brutas que contenham informações sensíveis.
3. Delegando Acesso a Equipes/Usuários Específicos Se o Esquema Contém Tabelas Destinadas a Múltiplas Equipes
Quando diferentes usuários ou equipes precisam de acesso a diferentes tabelas dentro do mesmo esquema. Por exemplo, a equipe de vendas pode precisar de acesso a tabelas relacionadas a clientes, enquanto a equipe financeira precisa de acesso a tabelas de receita.
Aplicar permissões ao nível da tabela garante que cada equipe possa acessar apenas as tabelas relevantes para o seu trabalho.
4. Conformidade com Governança de Dados
Ao impor políticas estritas de governança de dados, você pode precisar controlar o acesso em um nível mais granular (até tabelas individuais). As permissões ao nível da tabela ajudam a garantir conformidade, concedendo acesso apenas aos dados com os quais um usuário ou função está autorizado a trabalhar.
5. Manejando Necessidades de Acesso Diversificadas Dentro de um Esquema
Em casos em que um esquema contenha tabelas com diferentes níveis de sensibilidade ou confidencialidade, aplicar permissões no nível do esquema pode ser muito amplo. As permissões ao nível da tabela permitem que você gerencie o acesso para cada tabela individualmente com base em necessidades específicas.
Permissões Que Podem Ser Aplicadas ao Nível da Tabela
- SELECT: Concede acesso de leitura à tabela, permitindo que os usuários a consultem.
- MODIFY: Dá a habilidade de adicionar, excluir e modificar dados para ou de um objeto.
- APLICAR TAG: Dá a habilidade de aplicar tags a um objeto.
- TODOS OS PRIVILÉGIOS: Concede todos os privilégios.
Script de Automação
Pré-requisitos
- O Catálogo Unity já está configurado.
- O(s) Principal(is) está(ão) associado(s) ao espaço de trabalho do Databricks.
- O usuário que executa o script de permissão tem permissões adequadas na(s) tabela(s), esquema e catálogo.
Passo 1: Criar um Notebook e Declarar as Variáveis
Crie um notebook no espaço de trabalho do Databricks. Para criar um notebook em seu espaço de trabalho, clique no “+” Novo na barra lateral e depois escolha Notebook.
Um notebook em branco será aberto no espaço de trabalho. Certifique-se de que Python esteja selecionado como o idioma do notebook.
Copie e cole o trecho de código abaixo na célula do notebook e execute a célula.
catalog = 'main' # Specify your catalog name
schema = 'default' # Specify your schema name
tables_arr= 'test1,test2' # Specify the Comma(,) seperated values of table name
tables = tables_arr.split(',')
principals_arr = '' # Specify the Comma(,) seperated values for principals in the blank text section (e.g. groups, username)
principals = principals_arr.split(',')
privileges_arr = 'SELECT,APPLY TAG' # Specify the Comma(,) seperated values for priviledges in the blank text section (e.g. SELECT,APPLY TAG)
privileges = privileges_arr.split(',')
Passo 2: Definir o Catálogo e o Esquema
Copie, cole e execute o bloco de código abaixo em uma nova célula ou na célula existente e execute a célula.
query = f"USE CATALOG `{catalog}`" #Sets the Catalog
spark.sql(query)
query = f"USE SCHEMA `{schema}`" #Sets the Schema
spark.sql(query)
Passo 3: Percorra os Princípios e Privilégios e Aplique a Concessão no Catálogo, Esquema e Tabelas
Copie, cole e execute o bloco de código abaixo em uma nova célula ou na célula existente e execute a célula para aplicar as permissões.
for principal in principals:
query = f"GRANT USE_CATALOG ON CATALOG `{catalog}` TO `{principal}`" # Use catalog permission at Catalog level
spark.sql(query)
query = f"GRANT USE_SCHEMA ON SCHEMA `{schema}` TO `{principal}`" # Use schema permission at Schema level
spark.sql(query)
for table in tables:
for privilege in privileges:
query = f"GRANT `{privilege}` ON `{table}` TO `{principal}`" # Grant priviledges on the tables to the pricipal
print(query)
spark.sql(query)
Validação
Você pode validar os privilégios abrindo a interface do Databricks e navegando até “Catálogo” no Explorador de Dados. Uma vez que o catálogo aparece na seção de Dados, clique no catálogo, depois expanda o esquema e selecione a tabela dentro do esquema onde você aplicou as permissões, e vá para a aba “permissões”. Agora você pode ver todos os privilégios aplicados à tabela. Abaixo está a captura de tela das permissões aplicadas na tabela de catálogo padrão dentro do catálogo principal e esquema information_schema
.
Você também pode executar o script SQL abaixo em um notebook para exibir todas as permissões para uma tabela como parte da sua validação.
SHOW GRANTS ON TABLE table_name;
Conclusão
Automatizar o gerenciamento de privilégios no Catálogo de Unidade do Databricks ao nível da tabela ajuda a garantir uma abordagem consistente e eficiente na aplicação de permissões no nível mais baixo no Catálogo de Unidade. O código fornecido demonstra uma maneira prática de atribuir vários privilégios ao nível da tabela para vários princípios e tabelas em um único catálogo e esquema. Em um catálogo onde centenas de tabelas estão presentes e diferentes permissões precisam ser fornecidas para diferentes princípios, a automação acima reduz significativamente erros e esforços manuais.
Source:
https://dzone.com/articles/automate-databricks-unity-catalog-permissions-at-table-level