Compartilhar o acesso de leitura aos dados em uma Conta da AWS - Amazon Redshift

Compartilhar o acesso de leitura aos dados em uma Conta da AWS

Você pode compartilhar dados para fins de leitura em diferentes clusters do Amazon Redshift em uma Conta da AWS.

Para compartilhar dados para fins de leitura como administrador de cluster de produtores ou proprietário de banco de dados
  1. Crie datashares no seu cluster. Para obter mais informações, consulte CREATE DATASHARE.

    CREATE DATASHARE salesshare;

    Superusuário de cluster e proprietários de banco de dados podem criar conjuntos de dados. Cada datashare é associado a um banco de dados durante a criação. Somente objetos desse banco de dados podem ser compartilhados nesse datashare. Vários datashares podem ser criados no mesmo banco de dados com a mesma granularidade ou diferente de objetos. Não há limite para o número de datashares que um cluster pode criar.

    Também é possível usar o console do Amazon Redshift para criar datashares. Para obter mais informações, consulte Criar datashares.

  2. Delegue permissões para operar no datashare. Para obter mais informações, consulte GRANT ou REVOKE.

    O exemplo a seguir concede permissões para dbuser em salesshare.

    GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;

    Os superusuários do cluster e os proprietários da unidade de compartilhamento de dados podem conceder ou revogar permissões de modificação na unidade de compartilhamento de dados para usuários adicionais.

  3. Adicione ou remova objetos do datashare. Para adicionar objetos a um datashare, adicione o esquema antes de adicionar objetos. Quando você adiciona um esquema, o Amazon Redshift não adiciona todos os objetos abaixo dele. Adicione esses dados explicitamente. Para obter mais informações, consulte ALTER DATASHARE.

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD ALL TABLES IN SCHEMA PUBLIC;

    Você também pode adicionar visualizações a um datashare.

    CREATE VIEW public.sales_data_summary_view AS SELECT * FROM public.tickit_sales_redshift; ALTER DATASHARE salesshare ADD TABLE public.sales_data_summary_view;

    Use ALTER DATASHARE para compartilhar esquemas, tabelas, visualizações e funções em um determinado esquema. Os superusuários, os proprietários da unidade de compartilhamento de dados ou os usuários que têm a permissão ALTER ou ALL na unidade de compartilhamento de dados podem alterar a unidade de compartilhamento de dados para adicionar objetos ou remover objetos. Os usuários devem ter permissões para adicionar ou remover objetos da unidade de compartilhamento de dados. Os usuários também devem ser os proprietários dos objetos ou ter permissões SELECT, USAGE ou ALL nos objetos.

    Você também pode usar GRANT para adicionar objetos à unidade de compartilhamento de dados. Este exemplo mostra como:

    GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;

    Essa sintaxe é funcionalmente equivalente a ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;.

    Use a cláusula INCLUDENEW para adicionar novas tabelas, visualizações ou funções definidas pelo usuário (UDFs) do SQL criadas em um esquema especificado ao datashare. Somente superusuários podem alterar essa propriedade para cada par datashare-esquema.

    ALTER DATASHARE salesshare ADD SCHEMA PUBLIC; ALTER DATASHARE salesshare SET INCLUDENEW = TRUE FOR SCHEMA PUBLIC;

    Também é possível usar o console do Amazon Redshift para adicionar ou remover objetos de datashare. Para obter mais informações, consulte Adicionando objetos do datashare a datashares, Remover objetos do datashare de datashares e Editar datashares criados em sua conta.

  4. Adicione consumidores ou remova consumidores de datashares. O exemplo a seguir adiciona o namespace de cluster de consumidor a salesshare. O namespace é o identificador global exclusivo (GUID) do namespace do cluster de consumidor na conta. Para obter mais informações, consulte GRANT ou REVOKE.

    GRANT USAGE ON DATASHARE salesshare TO NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Você só pode conceder permissões a um consumidor de unidade de compartilhamento de dados em uma instrução GRANT.

    Os superusuários de cluster e os proprietários de objetos da unidade de compartilhamento de dados ou os usuários que tenham a permissão SHARE nessa unidade podem adicionar a ou remover consumidores de uma unidade de compartilhamento de dados. Para fazer isso, eles usam GRANT USAGE ou REVOKE USE.

    Para localizar o namespace do cluster que você vê no momento, você pode usar o comando SELECT CURRENT_NAMESPACE. Para localizar o namespace de um cluster diferente dentro da mesma Conta da AWS, acesse a página de detalhes do cluster do console do Amazon Redshift. Nessa página, localize o campo de namespace recém-adicionado.

    Também é possível usar o console do Amazon Redshift para adicionar ou remover consumidores de dados de unidades de compartilhamento de dados. Para ter mais informações, consulte Adicionar consumidores de dados a datashares e Remover consumidores de dados de datashares.

  5. (Opcional) Adicione restrições de segurança ao datashare. O exemplo a seguir mostra que o cluster de consumidores com um acesso IP público tem permissão para ler o datashare. Para obter mais informações, consulte ALTER DATASHARE.

    ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;

    Você pode modificar propriedades sobre o tipo de consumidores após a criação de datashare. Por exemplo, você pode definir que os clusters que desejam consumir dados de um dado datashare não podem ser acessíveis publicamente. Consultas de clusters de consumidores que não atendem às restrições de segurança especificadas na unidade de compartilhamento de dados são rejeitadas no tempo de execução da consulta.

    Também é possível usar o console do Amazon Redshift para editar datashares. Para obter mais informações, consulte Editar datashares criados em sua conta.

  6. Liste os datashares criados no cluster e examine o conteúdo do datashare.

    O exemplo a seguir exibe as informações de uma unidade de compartilhamento de dados chamada salesshare. Para ter mais informações, consulte DESC DATASHARE e SHOW DATASHARES.

    DESC DATASHARE salesshare; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+--------------------------------+------------------- 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_category_redshift| 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | schema | public | t 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | OUTBOUND | salesshare | view | public.sales_data_summary_view |

    O exemplo a seguir exibe os datashares de saída em um cluster de produtores.

    SHOW DATASHARES LIKE 'sales%';

    A saída será semelhante à seguinte.

    share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace -----------+--------------+-----------------+-------------------+------------+---------------------+----------------------+-----------+------------------+--------------------------------------- salesshare | 100 | dev | | OUTBOUND | 2020-12-09 02:27:08 | True | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d

    Para ter mais informações, consulte DESC DATASHARE e SHOW DATASHARES.

    Você também pode usar SVV_DATASHARES, SVV_DATASHARE_CONSUMERS e SVV_DATASHARE_OBJECTS para exibir os datashares, os objetos dentro do datashare e os consumidores de datashare.

  7. Descarte datashares. Para obter mais informações, consulte DROP DATASHARE.

    Você pode excluir os objetos do datashare a qualquer momento usando DROP DATASHARE. Superusuários de cluster e proprietários de datashare podem descartar datashares.

    O exemplo a seguir descarta uma unidade de compartilhamento de dados chamada salesshare.

    DROP DATASHARE salesshare;

    Também é possível usar o console do Amazon Redshift para excluir datashares. Para obter mais informações, consulte Excluir unidades de compartilhamento de dados criadas em sua conta.

  8. Use ALTER DATASHARE para remover objetos de datashares em qualquer ponto do datashare. Use REVOKE USAGE ON para revogar permissões no datashare para determinados consumidores. Ele revoga as permissões USAGE em objetos dentro de uma unidade de compartilhamento de dados e interrompe instantaneamente o acesso a todos os clusters de consumidores. Listar conjuntos de dados e as consultas de metadados, como listar bancos de dados e tabelas, não retorna os objetos compartilhados depois que o acesso é revogado.

    ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;

    Também é possível usar o console do Amazon Redshift para editar datashares. Para obter mais informações, consulte Editar datashares criados em sua conta.

  9. Revogue o acesso ao datashare a partir de namespaces se você não quiser mais compartilhar os dados com os consumidores.

    REVOKE USAGE ON DATASHARE salesshare FROM NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Também é possível usar o console do Amazon Redshift para editar datashares. Para obter mais informações, consulte Editar datashares criados em sua conta.

Para compartilhar dados para fins de leitura como administrador de cluster de consumidores
  1. Liste os datashares que são disponibilizados para você e visualize o conteúdo de datashares. Para ter mais informações, consulte DESC DATASHARE e SHOW DATASHARES.

    O exemplo a seguir exibe as informações de datashares de entrada de um namespace de produtor especificado. Quando você executa o DESC DATASHARE como um administrador de cluster de consumidor, você deve especificar a opção NAMESPACE para exibir os datashares de entrada.

    DESC DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d'; producer_account | producer_namespace | share_type | share_name | object_type | object_name | include_new -------------------+--------------------------------------+------------+------------+-------------+---------------------------------+------------------ 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_users_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_venue_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_category_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_date_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_event_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_listing_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | table | public.tickit_sales_redshift | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | schema | public | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d | INBOUND | salesshare | view | public.sales_data_summary_view |

    Somente superusuários de cluster podem fazer isso. Você também pode usar SVV_DATASHARES para visualizar os datashares e SVV_DATAASHARE_OBJECTS para vsualizar os objetos dentro do datashare.

    O exemplo a seguir exibe os datashares de entrada em um cluster de consumidores.

    SHOW DATASHARES LIKE 'sales%'; share_name | share_owner | source_database | consumer_database | share_type | createdate | is_publicaccessible | share_acl | producer_account | producer_namespace ------------+-------------+-----------------+-------------------+------------+------------+---------------------+-----------+------------------+-------------------------------------- salesshare | | | | INBOUND | | t | | 123456789012 | 13b8833d-17c6-4f16-8fe4-1a018f5ed00d
  2. Como superusuário de banco de dados, você pode criar bancos de dados locais que façam referência às unidades de compartilhamento de dados. Para ter mais informações, consulte CREATE DATABASE.

    CREATE DATABASE sales_db FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Se você quiser um controle mais granular sobre o acesso aos objetos no banco de dados local, use a cláusula WITH PERMISSIONS ao criar o banco de dados. Isso permite a você conceder permissões no nível de objeto para objetos no banco de dados na etapa 4.

    CREATE DATABASE sales_db WITH PERMISSIONS FROM DATASHARE salesshare OF NAMESPACE '13b8833d-17c6-4f16-8fe4-1a018f5ed00d';

    Você pode ver os bancos de dados criados a partir do datashare consultando a visualização SVV_REDSHIFT_DATABASES. Você não pode se conectar a esses bancos de dados criados a partir de datashares; eles são somente leitura. No entanto, você pode se conectar a um banco de dados local em seu cluster de consumidores e executar uma consulta entre bancos de dados para consultar os dados dos bancos de dados criados a partir de datashares. Você não pode criar um datashare em cima de objetos de banco de dados criados a partir de um datashare existente. No entanto, você pode copiar os dados em uma tabela separada no cluster de consumidores, executar qualquer processamento necessário e, em seguida, compartilhar os novos objetos que foram criados.

    Também é possível usar o console do Amazon Redshift para criar bancos de dados a partir de datashares. Para obter mais informações, consulte Criar bancos de dados a partir de datashares.

  3. (Opcional) Crie esquemas externos para consultar e atribuir permissões granulares a esquemas específicos no banco de dados do consumidor importado no cluster de consumidores. Para ter mais informações, consulte CREATE EXTERNAL SCHEMA.

    CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
  4. Conceda permissões em bancos de dados e referências de esquema criadas a partir das unidades de compartilhamento de dados para usuários e funções no cluster consumidor conforme necessário. Para obter mais informações, consulte GRANT ou REVOKE.

    GRANT USAGE ON DATABASE sales_db TO Bob;
    GRANT USAGE ON SCHEMA sales_schema TO ROLE Analyst_role;

    Se tiver criado o banco de dados sem WITH PERMISSIONS, você só poderá atribuir permissões em todo o banco de dados criado a partir da unidade de compartilhamento de dados para usuários e funções. Em alguns casos, você precisa de controles refinados em um subconjunto de objetos de banco de dados criados a partir do datashare. Nesse caso, você pode criar uma referência de esquema externo que aponte para esquemas específicos no datashare (conforme descrito na etapa anterior) e fornecer permissões detalhadas no nível do esquema.

    Você também pode criar exibições de vinculação tardia sobre objetos compartilhados e usá-las para atribuir permissões detalhadas. Você também pode considerar que os clusters de produtores criem conjuntos de dados adicionais para você com os detalhes necessários.

    Se tiver criado o banco de dados com WITH PERMISSIONS na etapa 2, você deverá atribuir permissões no nível de objeto para objetos no banco de dados compartilhado. Um usuário com apenas a permissão USAGE não poderá acessar nenhum objeto em um banco de dados criado com WITH PERMISSIONS até receber permissões adicionais no nível de objeto.

    GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
  5. Consultar dados nos objetos compartilhados nos datashares.

    Usuários e funções com permissões em bancos de dados consumidores e esquemas em clusters consumidores podem explorar e navegar nos metadados de quaisquer objetos compartilhados. Eles também podem explorar e navegar por objetos locais em um cluster de consumidores. Para fazer isso, eles usam drivers JDBC ou ODBC ou visualizações SVV_ALL e SVV_REFISH.

    Os clusters de produtores podem ter muitos esquemas no banco de dados, tabelas e visualizações dentro de cada esquema. Os usuários do lado do consumidor podem ver apenas o subconjunto de objetos que são disponibilizados através do datashare. Esses usuários não podem ver todos os metadados do cluster de produtores. Essa abordagem ajuda a fornecer controle de segurança de metadados detalhados com compartilhamento de dados.

    Você continua se conectando a bancos de dados de cluster locais. Mas agora, você também pode ler dos bancos de dados e esquemas que são criados a partir do datashare usando a notação database.schema.table de três partes. Você pode executar consultas que abrangem todos e todos os bancos de dados que são visíveis para você. Estes podem ser bancos de dados locais no cluster ou bancos de dados criados a partir dos datashares. Os clusters de consumidores não podem se conectar aos bancos de dados criados a partir dos datashares.

    Você pode acessar os dados usando a qualificação completa. Para obter mais informações, consulte Exemplos de uso de uma consulta entre bancos de dados.

    SELECT * FROM sales_db.public.tickit_sales_redshift ORDER BY 1,2 LIMIT 5; salesid | listid | sellerid | buyerid | eventid | dateid | qtysold | pricepaid | commission | saletime ---------+--------+----------+---------+---------+--------+---------+-----------+------------+--------------------- 1 | 1 | 36861 | 21191 | 7872 | 1875 | 4 | 728.00 | 109.20 | 2008-02-18 02:36:48 2 | 4 | 8117 | 11498 | 4337 | 1983 | 2 | 76.00 | 11.40 | 2008-06-06 05:00:16 3 | 5 | 1616 | 17433 | 8647 | 1983 | 2 | 350.00 | 52.50 | 2008-06-06 08:26:17 4 | 5 | 1616 | 19715 | 8647 | 1986 | 1 | 175.00 | 26.25 | 2008-06-09 08:38:52 5 | 6 | 47402 | 14115 | 8240 | 2069 | 2 | 154.00 | 23.10 | 2008-08-31 09:17:02

    Você só pode usar instruções SELECT em objetos compartilhados. No entanto, você pode criar tabelas no cluster de consumidores consultando os dados dos objetos compartilhados em um banco de dados local diferente.

    Além das consultas, os consumidores podem criar visualizações em objetos compartilhados. Somente visualizações de vinculação tardia ou visualizações materializadas são aceitas. O Amazon Redshift não oferece suporte a visualizações regulares em dados compartilhados. As visualizações criadas pelos consumidores podem abranger vários bancos de dados locais ou bancos de dados criados a partir de conjuntos de dados. Para ter mais informações, consulte CREATE VIEW.

    // Connect to a local cluster database // Create a view on shared objects and access it. CREATE VIEW sales_data AS SELECT * FROM sales_db.public.tickit_sales_redshift WITH NO SCHEMA BINDING; SELECT * FROM sales_data;