Pular para o conteúdo
Lucas Lessa
Voltar para as notícias
DatabricksAtualizaçãoImpacto: Alto

Filtre dados por usuário final com claims customizadas em tokens OAuth

Aplicações externas agora podem passar identificadores de usuários em tokens OAuth de service principal e filtrar linhas em views dinâmicas ou políticas ABAC.

O que mudou

O Databricks agora permite injetar claims de identidade customizadas em tokens OAuth emitidos para service principals. O recurso viabiliza o isolamento de dados por usuário final em aplicações multi-tenant sem a necessidade de provisionar contas de usuário do Databricks para cada cliente.

Para que serve

Imagine que você tem uma aplicação SaaS ou portal corporativo que atende centenas de clientes e armazena os registros de todos eles em tabelas compartilhadas. Em vez de criar um usuário no Databricks para cada pessoa ou expor tabelas separadas, a sua aplicação consulta a plataforma usando um único service principal.

Com essa novidade, você pode:

  • Injetar o identificador do cliente ou e-mail do usuário autenticado diretamente na criação do token OAuth.
  • Filtrar os dados em views dinâmicas ou políticas ABAC usando a função SQL current_oauth_custom_identity_claim().
  • Utilizar tabelas de mapeamento para traduzir o identificador da claim em permissões granulares.

Como usar

A aplicação solicita o token incluindo o parâmetro custom_claim via client credentials ou token exchange:

curl --request POST \
  --url https://<workspace-url>/oidc/v1/token \
  --user '<client-id>:<client-secret>' \
  --data 'grant_type=client_credentials' \
  --data 'scope=all-apis' \
  --data-urlencode 'custom_claim=acme'

O que acontece nesse código:

  1. Solicita um token OAuth de service principal ao endpoint do workspace.
  2. Passa o valor acme no parâmetro custom_claim para identificar o usuário ou tenant da sessão.

No catálogo, crie uma view dinâmica que compara a coluna de controle com a claim do chamador:

CREATE OR REPLACE VIEW meu_catalogo.meu_schema.minha_view_pedidos AS
SELECT order_id, customer_name, product, quantity, order_date
FROM meu_catalogo.meu_schema.pedidos
WHERE customer_name = current_oauth_custom_identity_claim();

O que acontece nesse código:

  1. Define uma view dinâmica que lê a tabela base de pedidos.
  2. A função current_oauth_custom_identity_claim() extrai o valor assinado no token em tempo de execução.
  3. Se o token não contiver uma claim, a função retorna NULL e a comparação descarta todas as linhas com segurança.

Limitações e requisitos

  • Requisitos: Service principal com secret OAuth ou política de federação ativa; SQL Warehouse ou computação executando Databricks Runtime 19.7 ou superior.
  • Superfícies suportadas: Driver Databricks JDBC conectado a SQL Warehouse, SQL Statement Execution API e Genie Agents API. Não funciona no editor SQL da interface web.
  • Regras da claim: Máximo de 1.000 caracteres ASCII imprimíveis (espaços, \t, \n e \r são aceitos). Caracteres não ASCII (acentos, emojis) provocam erro 400. A claim não é criptografada e fica visível no payload JWT do token; nunca passe senhas ou dados sensíveis.
Ver nota oficial do Databricks

Filter data per end user with OAuth custom identity claims

Resumo e explicação gerados por IA a partir da release note oficial. Em caso de dúvida, a documentação oficial da plataforma prevalece.

Relacionadas