Condivisione dell'accesso in lettura ai dati all'interno di un Account AWS - Amazon Redshift

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

Condivisione dell'accesso in lettura ai dati all'interno di un Account AWS

È possibile condividere i dati a scopo di lettura tra diversi cluster Amazon Redshift all'interno di un account Account AWS.

Come condividere i dati a scopo di lettura come amministratore del cluster producer o proprietario del database
  1. Creare le unità di condivisione dati nel cluster. Per ulteriori informazioni, consulta CREARE DATASHARE.

    CREATE DATASHARE salesshare;

    Le unità di condivisione dati possono essere create dall'utente con privilegi avanzati e dai proprietari di database del cluster. Ogni unità di condivisione dati è associata a un database durante la creazione. Solo gli oggetti di quel database possono essere condivisi in quella unità di condivisione dati. Sullo stesso database possono essere create più unità di condivisione dati con la stessa granularità di oggetti o con una granularità differente. Non vi è alcun limite sul numero di unità di condivisione dati che un cluster può creare.

    Per creare le unità di condivisione dati è possibile utilizzare anche la console Amazon Redshift. Per ulteriori informazioni, consulta Creazione di unità di condivisione dati.

  2. Delegare le autorizzazioni per operare sull'unità di condivisione dati. Per ulteriori informazioni, consultare GRANT o REVOKE.

    L'esempio seguente concede le autorizzazioni a dbuser su salesshare.

    GRANT ALTER, SHARE ON DATASHARE salesshare TO dbuser;

    Gli utenti con privilegi avanzati del cluster e i proprietari dell'unità di condivisione dati possono concedere o revocare le autorizzazioni di modifica sull'unità di condivisione dati ad altri utenti.

  3. Aggiungere oggetti o rimuovere oggetti dalle unità di condivisione dati. Per aggiungere oggetti a una unità di condivisione dati, aggiungere lo schema prima di aggiungere gli oggetti. Quando si aggiunge uno schema, Amazon Redshift non aggiunge tutti gli oggetti. Assicurarsi di aggiungerli esplicitamente. Per ulteriori informazioni, consulta 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;

    A una unità di condivisione dati è possibile aggiungere anche le viste.

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

    Utilizzare ALTER DATASHARE per condividere schemi e tabelle, viste e funzioni in un determinato schema. Gli utenti con privilegi avanzati, i proprietari di unità di condivisione dati o gli utenti che hanno l'autorizzazione ALTER o ALL sull'unità di condivisione dati possono modificare l'unità in modo da aggiungere o rimuovere oggetti. Gli utenti devono disporre delle autorizzazioni per aggiungere o rimuovere oggetti dall'unità di condivisione dati. Gli utenti devono inoltre essere i proprietari degli oggetti o disporre delle autorizzazioni SELECT, USAGE o ALL sugli oggetti.

    È inoltre possibile utilizzare GRANT per aggiungere oggetti al datashare. Questo esempio mostra come:

    GRANT SELECT ON TABLE public.tickit_sales_redshift TO DATASHARE salesshare;

    Questa sintassi è funzionalmente equivalente a. ALTER DATASHARE salesshare ADD TABLE public.tickit_sales_redshift;

    Utilizzare la clausola INCLUDENEW per aggiungere nuove tabelle, viste o funzioni definite dall'utente (FDU) SQL future create in uno scherma specificato nell'unità di condivisione dati. Solo gli utenti con privilegi avanzati possono modificare questa proprietà per ogni coppia unità di condivisione dati-schema.

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

    Per aggiungere o rimuovere oggetti dalle unità di condivisione dati è possibile utilizzare la console Amazon Redshift. Per ulteriori informazioni, consultare Aggiunta di oggetti di unità di condivisione dati alle unità di condivisione dati, Rimozione di oggetti di unità di condivisione dati dalle unità di condivisione dati e Modifica delle unità di condivisione dati create nell'account.

  4. Aggiungere o rimuovere i consumer dalle unità di condivisione dati. Nell'esempio seguente viene aggiunto lo spazio dei nomi del cluster consumer a salesshare. Lo spazio dei nomi è il GUID dello spazio dei nomi del cluster consumer nell'account. Per ulteriori informazioni, consulta GRANT o REVOKE.

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

    È possibile concedere le autorizzazioni a un consumer dell'unità di condivisione dati solo in un'istruzione GRANT.

    Gli utenti con privilegi avanzati per i cluster e i proprietari degli oggetti dell'unità di condivisione dati o gli utenti che dispongono dell'autorizzazione SHARE per l'unità di condivisione dati possono aggiungere o rimuovere i consumer da tale unità. Per fare ciò, usano GRANT USAGE o REVOKE USAGE

    Per trovare lo spazio dei nomi del cluster attualmente visualizzato, è possibile utilizzare il comando SELECT CURRENT_NAMESPACE. Per trovare lo spazio dei nomi di un cluster diverso all'interno dello stesso Account AWS, vai alla pagina dei dettagli del cluster della console Amazon Redshift. In quella pagina, individuare il campo dello spazio dei nomi appena aggiunto.

    È inoltre possibile utilizzare la console Amazon Redshift per aggiungere o rimuovere i consumer di dati dalle unità di condivisione dati. Per ulteriori informazioni, consultare Aggiunta di consumer di dati alle unità di condivisione dati e Rimozione dei consumer di dati dalle unità di condivisione dati.

  5. (Facoltativo) Aggiungere le limitazioni di sicurezza all'unità di condivisione dati. L'esempio seguente mostra che il cluster consumer con un accesso IP pubblico è autorizzato a leggere l'unità di condivisione dati. Per ulteriori informazioni, consulta ALTER DATASHARE.

    ALTER DATASHARE salesshare SET PUBLICACCESSIBLE = TRUE;

    È possibile modificare le proprietà relative al tipo di consumer dopo la creazione dell'unità di condivisione dati. Ad esempio, è possibile definire che i cluster che desiderano utilizzare dati da una determinata unità di condivisione dati non possano essere accessibili pubblicamente. Le query provenienti da cluster di consumer che non soddisfano le limitazioni di sicurezza specificate nell'unità di condivisione dati vengono rifiutate al momento dell'esecuzione della query.

    Per modificare le unità di condivisione dati è possibile utilizzare anche la console Amazon Redshift. Per ulteriori informazioni, consulta Modifica delle unità di condivisione dati create nell'account.

  6. Elencare le unità di condivisione dati create nel cluster ed esaminare il contenuto dell'unità.

    Nell'esempio seguente sono riportate le informazioni di una unità di condivisione dati denominata salesshare. Per ulteriori informazioni, consulta 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 |

    L'esempio seguente mostra le unità di condivisione dati in uscita in un cluster producer.

    SHOW DATASHARES LIKE 'sales%';

    L'output è simile al seguente.

    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

    Per ulteriori informazioni, consulta DESC DATASHARE e SHOW DATASHARES.

    È possibile utilizzare anche SVV_DATASHARES, SVV_DATASHARE_CONSUMERS e SVV_DATASHARE_OBJECTS per visualizzare le unità di condivisione dati, gli oggetti all'interno dell'unità di condivisione dati e i consumer dell'unità di condivisione dati.

  7. Eliminare le unità di condivisione dati. Per ulteriori informazioni, consulta DROP DATASHARE.

    Gli oggetti dell'unità di condivisione dati possono essere eliminati in qualsiasi momento usando DROP DATASHARE. Le unità di condivisione dati possono essere eliminate dagli utenti con privilegi avanzati del cluster e dai proprietari dell'unità di condivisione dati.

    Nell'esempio seguente viene rimossa un'unità di condivisione dati denominata salesshare.

    DROP DATASHARE salesshare;

    Per eliminare le unità di condivisione dati è possibile utilizzare anche la console Amazon Redshift. Per ulteriori informazioni, consulta Eliminazione delle unità di condivisione dati create nell'account.

  8. Utilizzare ALTER DATASHARE per rimuovere gli oggetti dalle unità di condivisione dati in qualsiasi punto dall'unità. Utilizzare REVOKE USAGE ON per revocare le autorizzazioni sull'unità di condivisione dati a su consumer. Revoca le autorizzazioni USAGE sugli oggetti all'interno di una unità di condivisione dati e disabilita immediatamente l'accesso a tutti i cluster di consumer. L'elenco delle unità di condivisione dati e delle query dei metadati, ad esempio l'elenco dei database e delle tabelle, non restituisce gli oggetti condivisi dopo la revoca dell'accesso.

    ALTER DATASHARE salesshare REMOVE TABLE public.tickit_sales_redshift;

    Per modificare le unità di condivisione dati è possibile utilizzare anche la console Amazon Redshift. Per ulteriori informazioni, consulta Modifica delle unità di condivisione dati create nell'account.

  9. Revocare l'accesso all'unità di condivisione dati dagli spazi dei nomi se non si desidera più condividere i dati con i consumer.

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

    Per modificare le unità di condivisione dati è possibile utilizzare anche la console Amazon Redshift. Per ulteriori informazioni, consulta Modifica delle unità di condivisione dati create nell'account.

Come condividere i dati a scopo di lettura come amministratore del cluster consumer
  1. Elencare le unità di condivisione dati rese disponibili e visualizzare il contenuto delle unità di condivisione dati. Per ulteriori informazioni, consulta DESC DATASHARE e SHOW DATASHARES.

    Nell'esempio seguente vengono visualizzate le informazioni relative alle unità di condivisione dati in ingresso di uno spazio dei nomi producer specificato. Quando si esegue DESC DATASHARE come amministratore del cluster consumer, è necessario specificare l'opzione NAMESPACE per visualizzare le unità di condivisione dati in ingresso.

    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 |

    Solo gli utenti con privilegi avanzati per il cluster possono completare questa opzione. È possibile utilizzare anche SVV_DATASHARES per visualizzare le unità di condivisione dati e SVV_DATASHARE_OBJECTS per visualizzare gli oggetti all'interno dell'unità di condivisione dati.

    L'esempio seguente mostra le unità di condivisione dati in uscita in un cluster producer.

    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. In qualità di utente di database con privilegi avanzati, puoi creare database locali che fanno riferimento alle unità di condivisione dati. Per ulteriori informazioni, consulta CREATE DATABASE.

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

    Se desideri un controllo più granulare sull'accesso agli oggetti nel database locale, utilizza la clausola WITH PERMISSIONS durante la creazione del database. In tal modo puoi assegnare le autorizzazioni per gli oggetti del database nel passaggio 4.

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

    È possibile vedere i database creati dall'unità di condivisione dati eseguendo una query sulla vista SVV_REDSHIFT_DATABASE. Non è possibile connettersi a questi database creati da unità di condivisione dati e sono di sola lettura. Tuttavia, è possibile connettersi a un database locale nel cluster consumer ed eseguire una query tra database per eseguire query sui dati dei database creati dalle unità di condivisione dati. Non è possibile creare una unità di condivisione dati sugli oggetti di database creati da una unità di condivisione dati esistente. Tuttavia, è possibile copiare i dati in una tabella separata nel cluster consumer, eseguire qualsiasi elaborazione necessaria e quindi condividere i nuovi oggetti creati.

    Per creare i database dalle unità di condivisione dati è possibile utilizzare anche la console Amazon Redshift. Per ulteriori informazioni, consulta Creazione di database da unità di condivisione dati.

  3. (Facoltativo) Creare schemi esterni per fare riferimento e assegnare autorizzazioni granulari a schemi specifici nel database consumer importato nel cluster consumer. Per ulteriori informazioni, consulta CREATE EXTERNAL SCHEMA.

    CREATE EXTERNAL SCHEMA sales_schema FROM REDSHIFT DATABASE 'sales_db' SCHEMA 'public';
  4. Concedi ai ruoli e agli utenti nel cluster consumer le autorizzazioni per i database e i riferimenti allo schema creati dalle unità di condivisione dati in base alle esigenze. Per ulteriori informazioni, consulta GRANT o REVOKE.

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

    Se hai creato il database senza la clausola WITH PERMISSIONS, puoi assegnare agli utenti e ai ruoli solo le autorizzazioni per l'intero database creato dall'unità di condivisione dati. In alcuni casi, sono necessari controlli a grana fine su un sottoinsieme di oggetti di database creati dall'unità di condivisione dati. In tal caso, è possibile creare un riferimento allo schema esterno che punti a schemi specifici nell'unità di condivisione dati (come descritto nel passaggio precedente) e fornire autorizzazioni granulari a livello di schema.

    È inoltre possibile creare viste ad associazione tardiva sugli oggetti condivisi e utilizzarle per assegnare autorizzazioni granulari. È inoltre possibile considerare che i cluster producer creino ulteriori unità di condivisione dati con la granularità richiesta.

    Se hai creato il database con la clausola WITH PERMISSIONS nel passaggio 2, devi assegnare le autorizzazioni per gli oggetti nel database condiviso. Un utente con solo l'autorizzazione USAGE non può accedere a nessun oggetto in un database creato con la clausola WITH PERMISSIONS finché non ottiene le autorizzazioni aggiuntive a livello di oggetto.

    GRANT SELECT ON sales_db.public.tickit_sales_redshift to Bob;
  5. Eseguire una query sui dati negli oggetti condivisi nelle unità di condivisione dati.

    Gli utenti e i ruoli con autorizzazioni per i database consumer e gli schemi nei cluster consumer possono esplorare e navigare tra i metadati di qualsiasi oggetto condiviso. Possono inoltre esplorare e navigare tra oggetti locali in un cluster consumer. Per fare ciò, utilizzano i driver JDBC o ODBC o le viste SVV_ALL e SVV_REDSHIFT.

    I cluster producer potrebbero avere molti schemi nel database, nelle tabelle e nelle viste all'interno di ogni schema. Gli utenti sul lato consumer possono vedere solo il sottoinsieme di oggetti che sono resi disponibili attraverso l'unità di condivisione dati. Questi utenti non possono visualizzare gli interi metadati dal cluster producer. Questo approccio consente di fornire un controllo granulare della sicurezza dei metadati con la condivisione dei dati.

    È possibile continuare a connettersi ai database locali nel cluster. Ma ora, è anche possibile leggere dai database e dagli schemi creati dall'unità di condivisione dati utilizzando la notazione database.schema.tabella in tre parti. È possibile eseguire query che si estendono su tutti i database visibili. Questi possono essere database locali sul cluster o database creati dalle unità di condivisione dati. I cluster consumer non possono connettersi ai database creati dalle unità di condivisione dati.

    È possibile accedere ai dati mediante la qualifica completa. Per ulteriori informazioni, consulta Esempi di utilizzo di una query tra database.

    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

    È possibile utilizzare le istruzioni SELECT solo su oggetti condivisi. Tuttavia, è possibile creare tabelle nel cluster consumer eseguendo una query sui dati degli oggetti condivisi in un database locale diverso.

    Oltre alle query, i consumer possono creare viste su oggetti condivisi. Sono supportate solo le viste ad associazione tardiva o le viste materializzate. Amazon Redshift non supporta le viste regolari sui dati condivisi. Le viste create dai consumer possono estendersi su più database locali o database creati dalle unità di condivisione dati. Per ulteriori informazioni, consulta 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;