Uso dos objetos seguros para controlar o acesso aos dados¶
Para garantir que os dados confidenciais em um banco de dados compartilhado não sejam expostos aos usuários em contas de consumidor, o Snowflake recomenda fortemente o compartilhamento de exibições seguras e/ou UDFs seguras em vez de compartilhar tabelas diretamente.
Além disso, para um ótimo desempenho, especialmente ao compartilhar dados em tabelas extremamente grandes, recomendamos definir chaves de clustering na(s) tabela(s) base(s) para seus objetos seguros.
Este tópico descreve o uso de chaves de clustering em tabelas base para objetos seguros compartilhados e fornece instruções passo a passo para compartilhar uma exibição segura com uma conta de consumidor. Ele fornece exemplos de scripts tanto para provedores de dados quanto para consumidores.
Nota
As instruções para compartilhar um objeto seguro são essencialmente as mesmas que compartilhar uma tabela, com a adição dos seguintes objetos:
Um esquema “privado” contendo a tabela base e um esquema “público” contendo o objeto seguro. Somente o esquema público e o objeto seguro são compartilhados.
Uma “tabela de mapeamento” (também no esquema “privado”), que só é necessária se você desejar compartilhar os dados na tabela base com várias contas de consumidor e compartilhar linhas específicas na tabela com contas específicas.
Exemplo de configuração e tarefas¶
Estas instruções de exemplo assumem que um banco de dados chamado mydb existe na conta do provedor de dados e tem dois esquemas, private e public. Se o banco de dados e os esquemas não existirem, você deve criá-los antes de prosseguir.
Etapa 1: criar dados e tabelas de mapeamento no esquema privado¶
Crie as duas tabelas a seguir no esquema mydb.private e preencha-as com dados:
sensitive_data — contém os dados para compartilhar, e uma coluna access_id para controlar o acesso aos dados por conta.sharing_access — utiliza a coluna access_id para mapear os dados compartilhados e as contas que podem acessar os dados.Etapa 2: criar uma exibição segura em esquema público¶
Crie a seguinte exibição segura no esquema mydb.public:
paid_sensitive_data — exibe dados baseados em conta.Observe que a coluna access_id da tabela base (sensitive_data) não precisa ser incluída na visualização.
Etapa 3: validar tabelas e exibição segura¶
Valide as tabelas e a visualização segura para garantir que os dados sejam filtrados corretamente por conta.
Para permitir a validação de exibições seguras que serão compartilhadas com outras contas, o Snowflake fornece um parâmetro de sessão, SIMULATED_DATA_SHARING_CONSUMER. Defina este parâmetro de sessão para o nome da conta do consumidor para a qual você deseja simular o acesso. Você pode então consultar a exibição e ver os resultados que um usuário na conta do consumidor verá.
Exemplo de script¶
O seguinte script ilustra a execução de todas as tarefas descritas na seção anterior:
Crie duas tabelas no esquema “privado” e preencha a primeira com dados de estoque de três empresas diferentes (Apple, Microsoft e IBM). Você então preencherá o segundo com dados que mapeiam os dados do estoque para contas individuais:
Crie uma exibição segura no esquema “público”. Esta exibição filtra os dados de estoque da primeira tabela por conta, usando as informações de mapeamento na segunda tabela:
Crie um compartilhamento usando a função ACCOUNTADMIN.
Adicione os objetos ao compartilhamento. Você pode optar por adicionar privilégios nestes objetos a um compartilhamento por uma função de banco de dados (Opção 1) ou conceder privilégios nos objetos diretamente ao compartilhamento (Opção 2):
Adicionar contas ao compartilhamento.
Exemplo de script (para consumidores)¶
O seguinte script pode ser usado pelos consumidores para criar um banco de dados (a partir do compartilhamento criado no script acima) e consultar a exibição segura no banco de dados resultante:
Traga o banco de dados compartilhado para sua conta, criando um banco de dados a partir do compartilhamento.
Conceda privilégios no banco de dados para outras funções em sua conta (por exemplo, CUSTOM_ROLE1). A instrução GRANT difere dependendo se os dados que o consumidor adicionou objetos à ação usando funções de banco de dados (Opção 1) ou concedendo privilégios nos objetos diretamente ao compartilhamento (Opção 2):
Use a função CUSTOM_ROLE1 para consultar a exibição no banco de dados que você criou. Observe que deve haver um warehouse ativo em uso na sessão para realizar consultas. No comando USE WAREHOUSE, substitua <nome_warehouse> pelo nome de um dos warehouses em sua conta. A função CUSTOM_ROLE1 deve ter o privilégio USAGE no warehouse: