Compartilhar unidades de compartilhamento de dados - Amazon Redshift

Compartilhar unidades de compartilhamento de dados

Você só precisa de unidades de compartilhamento de dados quando você está compartilhando dados entre diferentes clusters provisionados ou grupos de trabalho sem servidor do Amazon Redshift. No mesmo cluster, você pode consultar outro banco de dados usando uma notação simples de três partes database.schema.table, desde que tenha as permissões necessárias nos objetos do outro banco de dados.

Gerenciar permissões para unidades de compartilhamento de dados no Amazon Redshift

Como administrador de cluster de produtores, você mantém o controle para os conjuntos de dados que está compartilhando. Você pode adicionar novos objetos ao datashare ou removê-los de lá. Você também pode conceder ou revogar acesso a unidades de compartilhamento de dados como um todo para os clusters de consumidores, contas da AWS ou regiões da AWS. Quando as permissões são revogadas, os clusters de consumidor perdem imediatamente o acesso aos objetos compartilhados e deixam de visualizá-los na lista de unidades de compartilhamento de dados INBOUND no SVV_DATASHARES.

O exemplo a seguir cria a unidade de compartilhamento de dados salesshare e adiciona o esquema public e a tabela public.tickit_sales_redshift a salesshare. Ele também concede permissões de uso em salesshare ao namespace de cluster especificado.

CREATE DATASHARE salesshare; ALTER DATASHARE salesshare ADD SCHEMA public; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

Para CREATE DATASHARE, superusuários e proprietários de bancos de dados podem criar conjuntos de dados. Para obter mais informações, consulte CREATE DATASHARE. Para ALTER DATASHARE, o proprietário do datashare com as permissões necessárias nos objetos de datashare a serem adicionados ou removidos pode alterar o datashare. Para ter mais informações, consulte ALTER DATASHARE.

Como administrador de produtores, quando você solta um datashare, ele deixa de ser listado em clusters de consumidores. Os bancos de dados e referências de esquema criados no cluster de consumidor a partir do datashare descartado continuam a existir sem objetos neles. O administrador do cluster de consumidores precisa excluir esses bancos de dados manualmente.

No lado do consumidor, um administrador do cluster consumidor pode determinar quais usuários e grupos devem ter acesso aos dados compartilhados criando um banco de dados da unidade de compartilhamento de dados. Dependendo das opções escolhidas ao criar o banco de dados, você pode controlar o acesso a ele da maneira a seguir. Para obter mais informações sobre como criar um banco de dados a partir de uma unidade de compartilhamento de dados, consulte CREATE DATABASE.

Criação do bancos de dados sem a cláusula WITH PERMISSIONS

Um administrador pode controlar o acesso no nível do banco de dados ou do esquema. Para controlar o acesso no nível do esquema, o administrador deve criar um esquema externo a partir do banco de dados do Amazon Redshift criado com base na unidade de compartilhamento de dados.

O exemplo a seguir concede permissões para acessar uma tabela compartilhada no nível de banco de dados e no nível de esquema.

GRANT USAGE ON DATABASE sales_db TO Bob; CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE sales_db SCHEMA 'public'; GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

Para restringir ainda mais o acesso, você pode criar exibições sobre objetos compartilhados, expondo apenas os dados necessários. Você pode acabar usando essas exibições para dar acesso aos usuários e às funções.

Depois que os usuários tiverem acesso ao banco de dados ou esquema, eles terão acesso a todos os objetos compartilhados nesse banco de dados ou esquema.

Criação do bancos de dados com a cláusula WITH PERMISSIONS

Depois de conceder direitos de uso no banco de dados ou no esquema, um administrador poderá controlar ainda mais o acesso usando o mesmo processo de concessão da permissão que usaria em um banco de dados ou esquema local. Sem permissões de objeto individual, os usuários não podem acessar nenhum objeto no banco de dados compartilhado ou no esquema, mesmo depois de receberem a permissão USAGE.

O exemplo a seguir concede permissões para ter acesso a uma tabela compartilhada no nível do banco de dados.

GRANT USAGE ON DATABASE sales_db TO Bob; GRANT USAGE FOR SCHEMAS IN DATABASE sales_db TO Bob; GRANT SELECT ON sales_db.public.tickit_sales_redshift TO Bob;

Depois que tiverem recebido acesso ao banco de dados ou ao esquema, os usuários continuarão precisando receber as permissões relevantes para qualquer objeto no banco de dados ou esquema que você queira que eles acessem.

Compartilhamento detalhado usando WITH PERMISSIONS (visualização prévia)

Habilitação de clusters ou grupos de trabalho de tecnologia sem servidor para consultar a unidade de compartilhamento de dados

Esta etapa pressupõe que a unidade de compartilhamento de dados tenha origem em outro cluster ou no namespace do Amazon Redshift Serverless na conta ou esteja vindo de outra conta e tenha sido associada ao namespace que você está usando.

  1. O administrador do banco de dados consumidor pode criar um banco de dados a partir da unidade de compartilhamento de dados.

    CREATE DATABASE my_ds_db [WITH PERMISSIONS] FROM DATASHARE my_datashare OF NAMESPACE 'abc123def';

    Se criar um banco de dados WITH PERMISSIONS, você poderá conceder permissões granulares em objetos da unidades de compartilhamento de dados para usuários e funções diferentes. Sem isso, todos os usuários e funções com permissão USAGE no banco de dados da unidade de compartilhamento de dados recebem todas as permissões em todos os objetos dentro do banco de dados da unidade de compartilhamento de dados.

  2. Aqui está como conceder permissões a um usuário ou função do banco de dados do Redshift. Você deve ter uma conexão com um banco de dados local para executar essas instruções: Você não poderá executar essas instruções se executar um comando USE no banco de dados da unidade de compartilhamento de dados antes de executar as instruções de concessão.

    GRANT USAGE ON DATABASE my_ds_db TO ROLE data_eng; GRANT CREATE, USAGE ON SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT ALL ON ALL TABLES IN SCHEMA my_ds_db.my_shared_schema TO ROLE data_eng; GRANT USAGE ON DATABASE my_ds_db TO bi_user; GRANT USAGE ON SCHEMA my_ds_db.my_shared_schema TO bi_user; GRANT SELECT ON my_ds_db.my_shared_schema.table1 TO bi_user;

Trabalhar com visualizações no compartilhamento de dados do Amazon Redshift

Um cluster de produtores pode compartilhar visualizações regulares, de vinculação tardia e materializadas. Ao compartilhar visualizações regulares ou de vinculação tardia, você não precisa compartilhar as tabelas base. A tabela a seguir mostra como as visualizações são compatíveis com o compartilhamento de dados.

Exibir nome Essa visualização pode ser adicionada a um datashare? Um consumidor pode criar essa exibição em objetos do datashare entre clusters?
Visualização regular Sim Não
Visualização de vinculação tardia Sim Sim
Visualização materializada Sim Sim, mas somente com uma atualização completa

A consulta a seguir mostra a saída de uma visualização regular que é aceita com compartilhamento de dados. Para obter informações sobre a definição de visualização regular, consulte CREATE VIEW.

SELECT * FROM tickit_db.public.myevent_regular_vw ORDER BY eventid LIMIT 5; eventid | eventname ----------+------------- 3835 | LeAnn Rimes 3967 | LeAnn Rimes 4856 | LeAnn Rimes 4948 | LeAnn Rimes 5131 | LeAnn Rimes

A consulta a seguir mostra a saída de uma visualização de vinculação tardia que é compatível com compartilhamento de dados. Para obter mais informações sobre a definição de visualização de vinculação tardia, consulte CREATE VIEW.

SELECT * FROM tickit_db.public.event_lbv ORDER BY eventid LIMIT 5; eventid | venueid | catid | dateid | eventname | starttime --------+---------+-------+--------+------------------------------+--------------------- 1 | 305 | 8 | 1851 | Gotterdammerung | 2008-01-25 14:30:00 2 | 306 | 8 | 2114 | Boris Godunov | 2008-10-15 20:00:00 3 | 302 | 8 | 1935 | Salome | 2008-04-19 14:30:00 4 | 309 | 8 | 2090 | La Cenerentola (Cinderella) | 2008-09-21 14:30:00 5 | 302 | 8 | 1982 | Il Trovatore | 2008-06-05 19:00:00

A consulta a seguir mostra a saída de uma visualização materializada que é aceita com o compartilhamento de dados. Para obter mais informações sobre a definição de visualização materializada, consulte CREATE MATERIALIZED VIEW.

SELECT * FROM tickit_db.public.tickets_mv; catgroup | qtysold ----------+--------- Concerts | 195444 Shows | 149905

Você pode manter tabelas comuns em todos os locatários em um cluster de produtores. Você também pode compartilhar subconjuntos de dados filtrados por colunas de dimensão, como tenant_id (account_id ou namespace_id), para clusters de consumidores. Para fazer isso, você pode definir uma exibição na tabela base com um filtro nessas colunas de ID, por exemplo current_aws_account = tenant_id. No lado do consumidor, quando você consulta a exibição, você verá apenas as linhas que se qualificam para sua conta. Para fazer isso, você pode usar as funções de contexto do Amazon Redshift current_aws_account e current_namespace.

A consulta a seguir retorna o ID da conta em que reside o cluster atual do Amazon Redshift. Você pode executar essa consulta se estiver conectado ao Amazon Redshift.

select current_user, current_aws_account; current_user | current_aws_account -------------+-------------------- dwuser | 111111111111 (1row)

A consulta a seguir retorna o namespace do atual cluster do Amazon Redshift. Você pode executar essa consulta se estiver conectado ao banco de dados.

select current_user, current_namespace; current_user | current_namespace -------------+-------------------------------------- dwuser | 86b5169f-01dc-4a6f-9fbb-e2e24359e9a8 (1 row)

Atualização incremental para visões materializadas em uma unidade de compartilhamento de dados

O Amazon Redshift oferece suporte à atualização incremental para visões materializadas em uma unidade de compartilhamento de dados do consumidor quando as tabelas base são compartilhadas. A atualização incremental é uma operação em que o Amazon Redshift identifica alterações em uma ou mais tabelas base que ocorreram após a atualização anterior e atualiza somente os registros correspondentes na visão materializada. Para obter mais informações sobre este comportamento, consulte CREATE MATERIALIZED VIEW.

Gerenciar o acesso a operações de API de compartilhamento de dados com políticas do IAM

Para controlar o acesso às operações de API de compartilhamento de dados, use políticas baseadas em ações do IAM. Para obter mais informações sobre como gerenciar políticas do IAM, consulte Gerenciar políticas do IAM no Manual do usuário do IAM.

Para obter informações sobre as permissões necessárias para usar as operações de API de compartilhamento de dados, consulte “Permissões necessárias para usar as operações de API de compartilhamento de dados” no Guia de gerenciamento de clusters do Amazon Redshift.

Para tornar o compartilhamento de dados entre contas mais seguro, você pode usar uma chave condicional ConsumerIdentifier para as operações de API AuthorizeDataShare e DeauthorizeDataShare. Com isso, é possível controlar explicitamente quais Contas da AWS poderão fazer chamadas para as duas operações de API.

Você pode negar a autorização ou desautorização do compartilhamento de dados para qualquer consumidor que não seja sua própria conta. Para isso, especifique o número da Conta da AWS na política do IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Deny", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "*", "Condition": { "StringNotEquals": { "redshift:ConsumerIdentifier": "555555555555" } } } ] }

Você pode permitir que um produtor com um DataShareArn testshare2 compartilhe explicitamente com um consumidor que tem uma Conta da AWS de 111122223333 na política do IAM.

{ "Version": "2012-10-17", "Statement": [ { "Sid": "VisualEditor0", "Effect": "Allow", "Action": [ "redshift:AuthorizeDataShare", "redshift:DeauthorizeDataShare" ], "Resource": "arn:aws:redshift:us-east-1:666666666666:datashare:af06285e-8a45-4ee9-b598-648c218c8ff1/testshare2", "Condition": { "StringEquals": { "redshift:ConsumerIdentifier": "111122223333" } } } ] }