Compartilhamento de dados a partir de diversos bancos de dados

Os provedores de dados Snowflake podem compartilhar dados de vários bancos de dados usando exibições seguras. Uma exibição segura pode fazer referência a objetos como esquemas, tabelas e outras exibições contidas em um ou mais bancos de dados, desde que esses bancos de dados pertençam à mesma conta.

O compartilhamento de uma exibição segura que faça referência a objetos de vários bancos de dados é diferente do compartilhamento de dados que se encontram em um único banco de dados.

Além de realizar todas as etapas padrão para o compartilhamento de dados, você deve conceder o privilégio REFERENCE_USAGE em cada um dos bancos de dados referenciados por uma exibição segura que você deseje compartilhar. No entanto, você não precisa conceder REFERENCE_USAGE no banco de dados em que a exibição segura é criada.

Nota

Você não pode usar funções de banco de dados para compartilhar dados de vários bancos de dados. Você não pode conceder o privilégio REFERENCE_USAGE a uma função de banco de dados e não pode usar uma função de banco de dados para conceder uma exibição segura que faça referência a objetos de vários bancos de dados para um compartilhamento.

Você deve conceder o privilégio REFERENCE_USAGE separadamente em cada banco de dados referenciado em uma exibição segura, antes de conceder a exibição segura a um compartilhamento.

Para compartilhar uma exibição segura que faz referência a objetos de diversos bancos de dados:

  1. Conecte-se à sua conta Snowflake como um usuário com a função ACCOUNTADMIN ou uma função à qual é concedido o privilégio global CREATE SHARE. Para obter mais detalhes sobre o privilégio CREATE SHARE, consulte Habilitação de funções diferentes de ACCOUNTADMIN para executar tarefas de compartilhamento de dados.

  2. Criar um compartilhamento usando CREATE SHARE.

  3. Conceda o privilégio USAGE sobre o banco de dados que você deseja compartilhar usando GRANT <privilégio> … TO SHARE.

    Nota

    Se você estiver compartilhando uma exibição segura que faça referência a objetos contidos em diversos bancos de dados, você deve conceder o privilégio USAGE somente ao banco de dados em que a exibição segura é criada. Você só pode conceder USAGE a um banco de dados por compartilhamento.

    A concessão do privilégio USAGE ao banco de dados associa o compartilhamento a um banco de dados, que é necessário para conceder outros privilégios ao compartilhamento.

  4. Conceda o privilégio USAGE sobre cada esquema no banco de dados que você deseja compartilhar, usando GRANT <privilégio> … TO SHARE.

  5. Conceda o privilégio REFERENCE_USAGE sobre cada banco de dados adicional que contenha objetos referenciados pela exibição que você deseja compartilhar, usando GRANT <privilégio> … TO SHARE.

  6. Adicione a exibição ao compartilhamento concedendo o privilégio SELECT na exibição usando GRANT <privilégio> … TO SHARE.

  7. Adicionar uma ou mais contas de consumidor ao compartilhamento usando ALTER SHARE.

Agora o compartilhamento está pronto para ser consumido pelas contas especificadas.

Nota

Para compartilhar uma exibição segura que faça referência à UDF em um banco de dados diferente, você deve tornar a UDF segura. Para obter mais detalhes sobre como criar uma UDF segura, consulte Criação de um UDF ou procedimento armazenado seguro.

Exemplos

Consulte os exemplos a seguir para criar exibições seguras.

Exemplo 1: criar e compartilhar uma exibição segura em um banco de dados existente

Um provedor que organiza os dados em diferentes bancos de dados com base nas características dos dados e nas necessidades comerciais deseja compartilhar uma exibição segura em um banco de dados que junta os dados deste banco de dados com objetos (por exemplo: esquema, tabela, exibição) em outros bancos de dados.

Relacionamento entre bancos de dados, objetos de banco de dados, compartilhamentos e contas
  1. Crie o banco de dados database1 e os dados:

    CREATE DATABASE database1;
    CREATE SCHEMA database1.sch;
    CREATE TABLE database1.sch.table1 (id INT);
    CREATE VIEW database1.sch.view1 AS SELECT * FROM database1.sch.table1;
    
    Copy
  2. Crie o banco de dados database2 e os dados:

    CREATE DATABASE database2;
    CREATE SCHEMA database2.sch;
    CREATE TABLE database2.sch.table2 (id INT);
    
    Copy
  3. Crie o banco de dados database3 e os dados:

    CREATE DATABASE database3;
    CREATE SCHEMA database3.sch;
    CREATE TABLE database3.sch.table3 (id INT);
    
    Copy
  4. Crie a exibição segura com os dados a serem compartilhados em database3:

    CREATE SECURE VIEW database3.sch.view3 AS
      SELECT view1.id AS View1Id,
             table2.id AS table2id,
             table3.id AS table3id
      FROM database1.sch.view1 view1,
           database2.sch.table2 table2,
           database3.sch.table3 table3;
    
    Copy
  5. Crie o compartilhamento e conceda os privilégios necessários para configurá-lo.

    CREATE SHARE share1;
    GRANT USAGE ON DATABASE database3 TO SHARE share1;
    GRANT USAGE ON SCHEMA database3.sch TO SHARE share1;
    
    Copy
  6. Conceda os privilégios necessários para adicionar a exibição segura view3 ao compartilhamento.

    Os dados referenciados em bancos de dados adicionais pela exibição segura view3 exigem a concessão do privilégio REFERENCE_USAGE em database1 e database2 ao compartilhamento:

    GRANT REFERENCE_USAGE ON DATABASE database1 TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE database2 TO SHARE share1;
    
    GRANT SELECT ON VIEW database3.sch.view3 TO SHARE share1;
    
    Copy

Você pode compartilhar esses dados com consumidores em outras regiões usando um grupo de replicação para replicar dados para uma conta em outra região. Para obter instruções, consulte Exemplo 3: compartilhar dados de vários bancos de dados.

Exemplo 2: criar e compartilhar uma exibição segura em um banco de dados separado

Um provedor armazena dados de clientes em bancos de dados separados e não deseja criar novos objetos nesses bancos de dados. Para compartilhar dados, o provedor cria um novo banco de dados com uma exibição segura. A exibição segura faz referência a objetos (esquema, tabela, exibição) nos bancos de dados com dados de cliente.

Relacionamento entre bancos de dados, objetos de banco de dados, compartilhamentos e contas

Código de exemplo:

  1. Crie o banco de dados do cliente customer1_db e os dados:

    CREATE DATABASE customer1_db;
    CREATE SCHEMA customer1_db.sch;
    CREATE TABLE customer1_db.sch.table1 (id INT);
    CREATE VIEW customer1_db.sch.view1 AS SELECT * FROM customer1_db.sch.table1;
    
    Copy
  2. Crie o banco de dados do cliente customer2_db e os dados:

    CREATE DATABASE customer2_db;
    CREATE SCHEMA customer2_db.sch;
    CREATE TABLE customer2_db.sch.table2 (id INT);
    
    Copy
  3. Crie o novo banco de dados new_db e esquema sch:

    CREATE DATABASE new_db;
    CREATE SCHEMA new_db.sch;
    
    Copy
  4. Crie a exibição segura em new_db que faz referência a objetos em customer1_db e customer2_db:

    CREATE SECURE VIEW new_db.sch.view3 AS
      SELECT view1.id AS view1Id,
             table2.id AS table2ID
      FROM customer1_db.sch.view1 view1,
           customer2_db.sch.table2 table2;
    
    Copy
  5. Crie o compartilhamento e conceda os privilégios necessários para configurá-lo:

    CREATE SHARE share1;
    
    GRANT USAGE ON DATABASE new_db TO SHARE share1;
    GRANT USAGE ON SCHEMA new_db.sch TO SHARE share1;
    
    Copy
  6. Conceda os privilégios necessários para adicionar a exibição segura view3 ao compartilhamento.

    Os dados referenciados em bancos de dados adicionais pela exibição segura view3 exigem a concessão do privilégio REFERENCE_USAGE em customer1_db e customer2_db ao compartilhamento:

    GRANT REFERENCE_USAGE ON DATABASE customer1_db TO SHARE share1;
    GRANT REFERENCE_USAGE ON DATABASE customer2_db TO SHARE share1;
    
    GRANT SELECT ON VIEW new_db.sch.view3 TO SHARE share1;
    
    Copy

Compartilhamento de dados de vários bancos de dados com consumidores em outras regiões

Você pode compartilhar dados de vários bancos de dados com contas de consumidores em outras regiões e plataformas de nuvem usando um grupo de replicação. Inclua o compartilhamento e cada banco de dados ao qual o compartilhamento faz referência no grupo para replicar dados para uma conta Snowflake em outra região. Você pode então adicionar contas do consumidor ao compartilhamento replicado. Para instruções detalhadas, consulte Compartilhamento de dados de forma segura entre regiões e plataformas de nuvem.