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 useAllRowsWildcard
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”.
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\""] }