Filtros de dados no Lake Formation - AWS Lake Formation

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

Filtros de dados no Lake Formation

É possível implementar segurança por coluna, por linha e por célula ao criar filtros de dados. Você seleciona um filtro de dados ao conceder permissão SELECT ao Lake Formation nas tabelas. Se a tabela contiver estruturas de colunas aninhadas, será possível definir um filtro de dados incluindo ou excluindo as colunas secundárias e definir expressões de filtro em nível de linha em atributos aninhados.

Cada filtro de dados pertence a uma tabela específica em seu catálogo de dados. Um filtro de dados inclui as seguintes informações:

  • Nome do filtro

  • Os IDs de catálogo da tabela associada ao filtro

  • Nome da tabela

  • Nome do banco de dados que contém a tabela

  • Especificação de coluna: uma lista de colunas e colunas aninhadas (com tipos de dados struct) a serem incluídas ou excluídas dos resultados da consulta.

  • Expressão de filtro de linha — uma expressão que especifica as linhas a serem incluídas nos resultados da consulta. Com algumas restrições, a expressão tem a sintaxe de uma cláusula WHERE na linguagem PartiQL. Para especificar todas as linhas, selecione Acesso a todas as linhas em Acesso em nível de linha no console ou use AllRowsWildcard em chamadas de API.

    Para obter mais informações sobre o que é suportado em expressões de filtro de linha, consulte Suporte PartiQL em expressões de filtro de linha.

O nível de filtragem obtido depende de como você preenche o filtro de dados.

  • Ao especificar o curinga “todas as colunas” e fornecer uma expressão de filtro de linha, você está estabelecendo apenas a segurança por linha (filtragem de linhas).

  • Ao incluir ou excluir colunas específicas e colunas aninhadas e especificar “todas as linhas” utilizando o curinga de todas as linhas, você está estabelecendo somente a segurança em nível de coluna (filtragem de colunas).

  • Quando você inclui ou exclui colunas específicas e também fornece uma expressão de filtro de linha, está estabelecendo a segurança por célula (filtragem de células).

A captura de tela a seguir do console do Lake Formation mostra um filtro de dados que realiza a filtragem em nível de célula. Para consultas na tabela orders, ela restringe o acesso à coluna customer_name e os resultados da consulta retornam somente as linhas em que a coluna product_type contém “pharma”.

A janela do filtro de dados contém estes campos, organizados verticalmente: Nome do filtro de dados; Banco de dados de destino; Tabela de destino; Grupo de botões de opção com as opções Acesso a todas as colunas, Incluir colunas e Excluir colunas; Selecionar colunas (lista suspensa); Expressão do filtro de linha (caixa de texto de várias linhas). A opção Excluir colunas é selecionada, a coluna customer_name é selecionada para exclusão e o campo de expressão do filtro de linha contém 'product_type='pharma'.

Observe o uso de aspas simples para incluir o literal da string de caracteres, 'pharma'.

Você pode usar o console do Lake Formation para criar esse filtro de dados ou fornecer o seguinte objeto de solicitação para a operação CreateDataCellsFilter da API.

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

É possível criar tantos filtros de dados quantos necessários para uma tabela. Para fazer isso, você precisa de permissão SELECT com a opção de concessão em uma tabela. Por padrão, os administradores do Data Lake têm permissão para criar filtros de dados em todas as tabelas dessa conta. Normalmente, você usa apenas um subconjunto dos filtros de dados possíveis ao conceder permissões na tabela a uma entidade principal. Por exemplo, você pode criar um segundo filtro de dados para a orders tabela que é um filtro row-security-only de dados. Referindo-se à captura de tela anterior, você pode escolher a opção Acesso a todas as colunas e incluir uma expressão de filtro de linha de product_type<>pharma. O nome desse filtro de dados pode ser no-pharma. Ele restringe o acesso a todas as linhas que têm a coluna product_type definida como “pharma”.

O objeto de solicitação para a operação CreateDataCellsFilter da API desse filtro de dados é o seguinte.

{ "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"] }

Em seguida, você poderia conceder SELECT na tabela orders com o filtro de dados restrict-pharma a um usuário administrativo, e SELECT na tabela orders com o filtro de dados no-pharma a usuários não administrativos. Para usuários do setor de saúde, você concederia SELECT na tabela orders com acesso total a todas as linhas e colunas (sem filtro de dados), ou talvez com outro filtro de dados que restringe o acesso às informações de preços.

É possível incluir ou excluir colunas aninhadas ao especificar a segurança em nível de coluna e em nível de linha em um filtro de dados. No exemplo a seguir, o acesso ao campo product.offer é especificado usando nomes de colunas qualificados (entre aspas duplas). Isso é importante para campos aninhados, a fim de evitar a ocorrência de erros quando os nomes das colunas contêm caracteres especiais e para manter a compatibilidade com versões anteriores das definições de segurança em nível de coluna de nível superior.

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