Começando a utilizar o Secure Data Sharing¶
O Secure Data Sharing é um recurso extremamente poderoso e fácil de usar. Você pode começar como um provedor de dados com apenas alguns passos.
Este tópico introduz as tarefas necessárias para compartilhar um banco de dados e seus objetos com uma ou mais contas ao criar um compartilhamento. Você pode fornecer um compartilhamento aos consumidores usando compartilhamentos diretos ou listagens.
Você pode anexar um compartilhamento a uma listagem ou converter um compartilhamento direto com consumidores ativos em uma listagem. Para obter instruções, consulte Conversão de um compartilhamento direto em uma listagem.
Neste tópico:
Como compartilhar objetos de banco de dados¶
Antes de continuar, determine qual das seguintes opções para adicionar objetos a um compartilhamento atende melhor às suas necessidades:
Opção 1. Conceder uma função de banco de dados a um compartilhamento:
Segmente os objetos protegíveis em um compartilhamento, criando múltiplas funções de banco de dados em um banco de dados para um compartilhamento. Conceda privilégios em um subconjunto dos objetos do banco de dados para cada função do banco de dados. Em seguida, conceda cada função de banco de dados ao compartilhamento.
Após criar um banco de dados a partir de um compartilhamento que inclui funções de banco de dados, os consumidores de dados concedem cada função de banco de dados compartilhada a uma ou mais funções de conta em sua própria conta.
Sem funções de banco de dados, os administradores de contas em contas de consumidores de dados concedem um único privilégio, IMPORTED PRIVILEGES, para permitir que seus usuários acessem todos os bancos de dados e objetos de banco de dados (tabelas, exibições seguras etc.) em um compartilhamento. Não há opção para permitir que diferentes grupos de usuários em uma conta de consumidor de dados acessem um subconjunto dos objetos compartilhados. Esta abordagem de tudo ou nada exige que você crie várias ações para conceder acesso a diferentes objetos no mesmo banco de dados.
Nota
Se você planeja incluir dados de vários bancos de dados em um único compartilhamento, não poderá usar essa opção porque o privilégio REFERENCE_USAGE não pode ser concedido a uma função de banco de dados. Para obter orientação sobre o compartilhamento de dados a partir de diversos bancos de dados, consulte Compartilhamento de dados a partir de diversos bancos de dados.
Como alternativa, você pode criar um compartilhamento que conceda funções de banco de dados a um compartilhamento (opção 1), mas também conceda privilégios em objetos diretamente ao mesmo compartilhamento sem conceder privilégios nesses objetos a uma função de banco de dados (opção 2). Os consumidores de dados que criam bancos de dados a partir do compartilhamento podem acessar os objetos concedidos ao compartilhamento diretamente ao conceder o privilégio IMPORTED PRIVILEGES no banco de dados a funções locais.
Dica
Uma função de banco de dados compartilhada não oferece suporte a concessões futuras em objetos. Para obter mais detalhes, consulte GRANT DATABASE ROLE … TO SHARE.
Opção 2. Conceder privilégios em objetos diretamente a um compartilhamento:
Concede privilégios em objetos específicos do banco de dados diretamente a um compartilhamento. Esta opção permite que você inclua dados de vários bancos de dados em um compartilhamento, desde que estes bancos de dados pertençam à mesma conta. Para obter orientação sobre o compartilhamento de dados a partir de diversos bancos de dados, consulte Compartilhamento de dados a partir de diversos bancos de dados.
Os administradores de contas em contas de consumidores de dados concedem o privilégio IMPORTED PRIVILEGES em bancos de dados compartilhados a uma ou mais funções para permitir que seus usuários acessem os bancos de dados e objetos de banco de dados (tabelas, exibições seguras etc.) em um compartilhamento.
Note que esta opção não oferece suporte à segmentação de objetos de banco de dados em um compartilhamento baseado em funções. Para este nível de controle, consulte a Opção 1.
Opção 1: concessão de funções de banco de dados a um compartilhamento¶
Esta seção fornece instruções para que os provedores de dados restrinjam o acesso a bancos de dados e objetos de banco de dados em um compartilhamento, usando funções de banco de dados.
Nota
Para executar as tarefas descritas neste tópico, sua função deve ter os privilégios globais CREATE DATABASE e CREATE SHARE.
No exemplo detalhado ao longo desta seção, um provedor de dados compartilha os seguintes objetos com os consumidores de dados:
Bancos de dados |
|
|
---|---|---|
Esquemas |
|
|
Exibições seguras |
O conjunto de resultados para esta exibição inclui registros da tabela |
O conjunto de resultados para esta exibição inclui registros das tabelas |
O provedor de dados cria duas funções no banco de dados d1
para controlar o acesso a esses objetos: d1.r1
e d1.r2
.
O diagrama a seguir mostra as relações entre esses objetos e indica os privilégios que são concedidos às funções do banco de dados:
Para obter mais informações sobre os privilégios, consulte Privilégios de controle de acesso.
Etapa 1: criar funções de banco de dados¶
Crie uma nova função de banco de dados ou substitua uma função de banco de dados existente usando CREATE DATABASE ROLE.
Por exemplo, crie funções de banco de dados d1.r1
e d1.r2
usando identificadores totalmente qualificados:
CREATE DATABASE ROLE d1.r1;
CREATE DATABASE ROLE d1.r2;
Como alternativa, defina o banco de dados desejado como o banco de dados atual na sessão, e então crie as funções do banco de dados:
USE DATABASE d1;
CREATE DATABASE ROLE r1;
CREATE DATABASE ROLE r2;
Etapa 2: conceder privilégios em objetos a funções de banco de dados¶
Conceda privilégios em um único banco de dados e subconjunto de objetos no banco de dados para cada função do banco de dados usando GRANT <privilégios>. Somente conceda privilégios em objetos aos quais a função de banco de dados deve permitir o acesso.
Especifique o nome totalmente qualificado de uma função de banco de dados ou defina o banco de dados como o banco de dados ativo em uma sessão e, em seguida, especifique o nome relativo.
Nota
Para executar as tarefas descritas neste tópico, você deve usar a função ACCOUNTADMIN ou uma função com os privilégios relevantes. Para obter mais informações, incluindo cenários adicionais de compartilhamento de dados, consulte Como trabalhar com compartilhamentos.
Os privilégios concedidos a uma função de banco de dados são limitados a USAGE no banco de dados e esquema que contém a função de banco de dados e privilégios em outros objetos no mesmo banco de dados. Em especial, note que o privilégio REFERENCE_USAGE não pode ser concedido a uma função de banco de dados para incluir objetos de múltiplos bancos de dados em um compartilhamento.
Continuando o exemplo detalhado nestas instruções, os seguintes privilégios são concedidos às funções do banco de dados:
Função de banco de dados |
Privilégio |
Objeto |
---|---|---|
|
USAGE |
Banco de dados |
USAGE |
Esquema |
|
SELECT |
Exibição segura |
|
|
USAGE |
Banco de dados |
USAGE |
Esquema |
|
SELECT |
Exibição segura |
As seguintes instruções SQL concedem privilégios à função do banco de dados d1.r1
:
GRANT USAGE ON SCHEMA d1.s1 TO DATABASE ROLE d1.r1;
GRANT SELECT ON VIEW d1.s1.v1 TO DATABASE ROLE d1.r1;
As seguintes instruções SQL concedem privilégios à função do banco de dados d1.r2
:
GRANT USAGE ON SCHEMA d1.s1 TO DATABASE ROLE d1.r2;
GRANT SELECT ON VIEW d1.s1.v2 TO DATABASE ROLE d1.r2;
Note que não é necessário conceder o privilégio USAGE no banco de dados pai. Este privilégio é concedido implicitamente quando uma função de banco de dados é criada.
Para visualizar todos os privilégios concedidos a uma função de banco de dados, execute SHOW GRANTS TO DATABASE ROLE usando identificadores totalmente qualificados:
SHOW GRANTS TO DATABASE ROLE d1.r1;
SHOW GRANTS TO DATABASE ROLE d1.r2;
Como alternativa, defina o banco de dados desejado como o banco de dados atual na sessão e então execute o comando:
USE DATABASE d1;
SHOW GRANTS TO DATABASE ROLE r1;
SHOW GRANTS TO DATABASE ROLE r2;
Etapa 3: criar um compartilhamento¶
Criar um compartilhamento usando CREATE SHARE. O compartilhamento é um recipiente vazio neste estágio do processo.
Por exemplo, crie um novo compartilhamento chamado share1
:
CREATE SHARE share1;
Etapa 4: adicionar o banco de dados concedendo o privilégio USAGE ao compartilhamento¶
Atualmente, é necessário conceder o privilégio USAGE em um banco de dados para incluí-lo em um compartilhamento.
Por exemplo, conceda o privilégio USAGE no banco de dados d1
para o compartilhamento share1
:
GRANT USAGE ON DATABASE d1 TO SHARE share1;
Etapa 5: adicionar objetos ao conceder funções de banco de dados ao compartilhamento¶
Adicione bancos de dados e objetos de banco de dados a um compartilhamento, concedendo funções de banco de dados ao compartilhamento usando GRANT DATABASE ROLE … TO SHARE.
Por exemplo, conceda funções de banco de dados d1.r1
e d1.r2
para o compartilhamento share1
:
GRANT DATABASE ROLE d1.r1 TO SHARE share1;
GRANT DATABASE ROLE d1.r2 TO SHARE share1;
Etapa 6: compartilhar os objetos de banco de dados com uma ou mais contas de consumidores de dados¶
Modifique o compartilhamento ALTER SHARE … ADD ACCOUNTS e adicione as contas de consumidor do banco de dados com as quais você deseja compartilhar os objetos de banco de dados.
O exemplo seguinte adiciona contas consumer1
e consumer2
na organização org1
para o compartilhamento share1
:
ALTER SHARE share1 ADD ACCOUNTS = org1.consumer1,org1.consumer2;
Gerenciamento de funções de bancos de dados¶
Esta seção fornece instruções para gerenciar as funções de banco de dados que são concedidas aos compartilhamentos.
Provedores de dados: renomeação de funções de banco de dados compartilhadas¶
Renomeie as funções do banco de dados usando uma instrução ALTER DATABASE ROLE … RENAME TO.
Por exemplo, renomeie a função de banco de dados d1.r1
como d1.r3
:
ALTER DATABASE ROLE d1.r1 RENAME TO d1.r3;
Todos os privilégios concedidos a d1.r1
são mantidos após a renomeação da função do banco de dados.
Notifique qualquer consumidor de dados de um compartilhamento que o nome da função de banco de dados tenha mudado.
É proibido mover uma função de banco de dados para um banco de dados diferente usando a cláusula RENAME TO. Por exemplo:
ALTER DATABASE ROLE d1.r1 RENAME TO d2.r1;
Provedores de dados: descarte de funções de banco de dados compartilhadas¶
Descarte as funções de banco de dados usando DROP DATABASE ROLE.
Por exemplo, descarte a função de banco de dados d1.r2
:
DROP DATABASE ROLE d1.r2;
Notifique qualquer consumidor de dados de um compartilhamento que inclua a função de banco de dados. O acesso a qualquer objeto concedido à função de banco de dados é revogado.
Provedores de dados: criação de novas funções de banco de dados compartilhadas¶
Crie novas funções de banco de dados usando CREATE DATABASE ROLE. Para obter mais informações, consulte Etapa 1: criar funções de banco de dados (neste tópico). Conceda privilégios em objetos de banco de dados a uma função de banco de dados, e depois conceda a função de banco de dados a um compartilhamento.
Notifique qualquer consumidor de dados de um compartilhamento que inclua a nova função de banco de dados. Eles devem conceder a nova função de banco de dados a suas próprias funções de conta para permitir que essas funções tenham acesso aos objetos associados à função de banco de dados.
Opção 2: concessão de privilégios diretamente a um compartilhamento¶
Esta seção fornece instruções para que os provedores de dados permitam aos consumidores acessar todos os bancos de dados e objetos de banco de dados em um compartilhamento, concedendo um único privilégio nos bancos de dados compartilhados.
Passo 1: criar um compartilhamento¶
Use CREATE SHARE para criar um compartilhamento. Neste passo, o compartilhamento é simplesmente um recipiente esperando que objetos e contas sejam adicionados.
Passo 2: adicionar objetos ao compartilhamento através da concessão privilégios¶
Utilize GRANT <privilégio> … TO SHARE para conceder os seguintes privilégios de objeto ao compartilhamento:
Privilégio de USAGE sobre o banco de dados que você deseja compartilhar.
Privilégio de USAGE em cada esquema de banco de dados contendo os objetos que você deseja compartilhar.
Privilégio SELECT de compartilhar objetos específicos em cada esquema compartilhado:
Tabelas
Tabelas externas
Exibições seguras
Exibições materializadas seguras
UDFs seguros
Importante
Se você planeja compartilhar dados com segurança com consumidores em diferentes regiões ou plataformas de nuvem, observe que, atualmente, a replicação de um banco de dados primário é bloqueada se houver uma ou mais tabelas externas no banco de dados.
Nota
Não é recomendado criar uma exibição segura em fluxos e depois compartilhar essas exibições com os consumidores. Em vez disso, permita que os consumidores criem seus próprios fluxos nas tabelas e protejam as exibições que você compartilha. Para obter mais informações, consulte Fluxos em objetos compartilhados.
Opcionalmente, utilize SHOW GRANTS para visualizar as concessões de objetos para o compartilhamento.
Dica
Realize esta quantidade mínima de validação do compartilhamento neste ponto, pois após completar o próximo passo, o compartilhamento ficará visível para todas as contas que são adicionadas ao compartilhamento.
Para realizar uma validação mais profunda do compartilhamento, você poderá simular uma conta de consumidor em sua conta. Para obter mais detalhes, consulte Uso de objetos seguros para controlar o acesso aos dados.
Passo 3: adicionar uma ou mais contas ao compartilhamento¶
Utilize ALTER SHARE para adicionar uma ou mais contas ao compartilhamento. Para examinar as contas adicionadas ao compartilhamento, você pode usar SHOW GRANTS.
Agora o compartilhamento está pronto para ser consumido pelas contas especificadas. Para obter instruções mais detalhadas para executar estas e outras tarefas do provedor de dados, consulte Como trabalhar com compartilhamentos.
Exemplo¶
O exemplo a seguir ilustra o processo de provedor em sua totalidade, conforme descrito acima.
Note que este exemplo considera que:
existe um banco de dados chamado
sales_db
com um esquema chamadoaggregates_eula
e uma tabela chamadaaggregate_1
.o banco de dados, o esquema e a tabela serão compartilhados com duas contas denominadas
xy12345
eyz23456
.USE ROLE accountadmin; CREATE SHARE sales_s; GRANT USAGE ON DATABASE sales_db TO SHARE sales_s; GRANT USAGE ON SCHEMA sales_db.aggregates_eula TO SHARE sales_s; GRANT SELECT ON TABLE sales_db.aggregates_eula.aggregate_1 TO SHARE sales_s; SHOW GRANTS TO SHARE sales_s; ALTER SHARE sales_s ADD ACCOUNTS=xy12345, yz23456; SHOW GRANTS OF SHARE sales_s;Copy