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:
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.
Criar um compartilhamento usando CREATE SHARE.
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.
Conceda o privilégio USAGE sobre cada esquema no banco de dados que você deseja compartilhar, usando GRANT <privilégio> … TO SHARE.
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.
Adicione a exibição ao compartilhamento concedendo o privilégio SELECT na exibição usando GRANT <privilégio> … TO SHARE.
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.
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;
CopyCrie o banco de dados
database2
e os dados:CREATE DATABASE database2; CREATE SCHEMA database2.sch; CREATE TABLE database2.sch.table2 (id INT);
CopyCrie o banco de dados
database3
e os dados:CREATE DATABASE database3; CREATE SCHEMA database3.sch; CREATE TABLE database3.sch.table3 (id INT);
CopyCrie 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;
CopyCrie 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;
CopyConceda 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 emdatabase1
edatabase2
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.
Código de exemplo:
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;
CopyCrie 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);
CopyCrie o novo banco de dados
new_db
e esquemasch
:CREATE DATABASE new_db; CREATE SCHEMA new_db.sch;
CopyCrie a exibição segura em
new_db
que faz referência a objetos emcustomer1_db
ecustomer2_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;
CopyCrie 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;
CopyConceda 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 emcustomer1_db
ecustomer2_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.