Salta al contenuto

Come posso concedere autorizzazioni di accesso a schemi esterni in Amazon Redshift?

5 minuti di lettura
0

I miei utenti non possono accedere agli oggetti nello schema esterno del mio cluster Amazon Redshift.

Breve descrizione

Quando utilizzi schemi esterni in Amazon Redshift, potresti ricevere i seguenti messaggi di errore:

  • "Permission denied"
  • "Operation is not supported"
  • "External tables are not supported in views"

Anche configurazioni errate delle autorizzazioni di AWS Lake Formation possono causare errori in Amazon Redshift Spectrum. Per risolvere il problema, devi concedere le autorizzazioni per gli schemi esterni, non a livello di tabella.

Risoluzione

Concedi l'autorizzazione per accedere agli oggetti nello schema esterno

Quando un utente Amazon Redshift non ha l'autorizzazione per accedere agli oggetti in uno schema esterno, potrebbe ricevere il seguente errore:

"ERROR: permission denied for schema external_schema_name"

Per concedere le autorizzazioni all'utente, completa i seguenti passaggi:

  1. Apri la console Amazon Redshift.

  2. Accedi come superutente.

  3. Esegui questo comando per verificare le autorizzazioni dell'utente per lo schema esterno a cui desidera accedere:

    SELECT *
    FROM SVV_SCHEMA_PRIVILEGES
    WHERE identity_name = 'name_of_the_user/role/group' AND namespace_name = 'external_schema_name';

    Nota: sostituisci name_of_the_user/role/group con il nome, il ruolo o il gruppo dell'utente a cui desideri concedere l'accesso. Sostituisci external_schema_name con il nome dello schema esterno.

    Se il comando precedente non restituisce il tipo di autorizzazione USAGE, l'utente, il ruolo o il gruppo non ha l'autorizzazione per eseguire query sullo schema esterno.

  4. Esegui uno di questi comandi GRANT per concedere l'autorizzazione all'utilizzo dello schema esterno:

    GRANT USAGE ON SCHEMA external_schema_name TO user_name;
    GRANT USAGE ON SCHEMA external_schema_name TO role role_name;
    GRANT USAGE ON SCHEMA external_schema_name TO group group_name;

    Nota: sostituisci external_schema_name con il nome dello schema esterno. Sostituisci user_name, role_name o group_name con l'utente, il ruolo o il gruppo a cui desideri concedere l'accesso.

Risolvi i problemi di autorizzazione alla condivisione dei dati

Quando tenti di concedere l'autorizzazione agli oggetti in uno schema esterno, potresti ricevere il seguente messaggio di errore:

"ERROR: Operation is not supported through datashares".

Questo errore si verifica nelle seguenti situazioni:

  • Lo schema esterno proviene da un database creato da un'unità di condivisione dati.
  • L'unità di condivisione dati originale non includeva la clausola WITH PERMISSIONS.

Per risolvere il problema, ricrea il database dall'unità di condivisione dati con la clausola WITH PERMISSIONS.

Completa i seguenti passaggi:

  1. Esegui questo comando per eliminare il database creato dall'unità di condivisione esistente:

    DROP database database_created_from_datashare_name;

    Nota: sostituisci database_created_from_datashare_name con il nome del tuo database.

  2. Esegui questo comando per ricreare il database:

    CREATE DATABASE database_created_from_datashare_name
    WITH PERMISSIONS
    FROM DATASHARE 'datashare_name'
    OF ACCOUNT 'account_number'
    NAMESPACE 'namespace_uuid';

    Nota: sostituisci database_created_from_datashare_name con il nome del tuo database e datashare_name con il nome della tua unità di condivisione dati. Sostituisci account number con il numero del tuo account AWS e namespace_uuid con l'identificatore univoco universale (UUID) del tuo namespace.

  3. Esegui questo comando per creare lo schema esterno:

    CREATE EXTERNAL SCHEMA external_schema_name
    FROM REDSHIFT DATABASE database_created_from_datashare_name
    SCHEMA schema_in_database_created_from_datashare;

    Nota: sostituisci external_schema_name con il nome dello schema esterno e database_created_from_datashare_name con il nome del tuo database. Sostituisci schema_in_database_created_from_datashare con il nome dello schema che hai creato da un'unità di condivisione dati.

  4. Esegui questo comando per concedere le autorizzazioni di utilizzo:

    GRANT USAGE on SCHEMA external_schema_name to user_name;
    GRANT USAGE ON SCHEMA database_created_from_datashare_name.schema_in_datashare_name TO user_name;

    Nota: sostituisci external_schema_name con il nome dello schema esterno. Sostituisci user_name con il nome dell'utente a cui desideri concedere l'utilizzo. Sostituisci database_created_from_datashare_name con il nome del database creato da un'unità di condivisione dati e schema_in_datashare_name con il nome del tuo schema.

  5. Esegui questo comando SELECT per concedere l'autorizzazione all'accesso a tabelle specifiche:

    GRANT SELECT ON
    TABLE database_created_from_datashare_name.schema_in_datashare_name.table_name
    TO user_name;

    Nota: sostituisci database_created_from_datashare_name con il nome del database creato da un'unità di condivisione dati e schema_in_datashare_name con il nome del tuo schema. Sostituisci table_name con il nome della tua tabella e user_name con il tuo nome utente.

    Per concedere l'accesso a tutte le tabelle dello schema, esegui questo comando:

    GRANT SELECT ON
    ALL TABLES IN SCHEMA database_created_from_datashare_name.schema_in_datashare_name
    TO user_name;

    Nota: sostituisci database_created_from_datashare_name con il nome del database creato da un'unità di condivisione dati e schema_in_datashare_name con il nome del tuo schema. Sostituisci user_name con il tuo nome utente.

Risolvi i problemi di autorizzazione di Lake Formation per schemi esterni

Verifica di aver attivato Lake Formation per il Catalogo dati AWS Glue. Verifica inoltre che il ruolo AWS Identity and Access Management (AWS IAM) del cluster Amazon Redshift abbia le autorizzazioni per il Catalogo dati AWS Glue richieste.

Per ulteriori informazioni, consulta Redshift Spectrum e AWS Lake Formation e Gestione delle autorizzazioni di Lake Formation.

Garantisci un controllo granulare degli accessi con schemi esterni

Utilizza Lake Formation o il concatenamento dei ruoli per garantire un controllo granulare degli accessi in Amazon Redshift Spectrum. Puoi concedere autorizzazioni a livello di schema, tabella o colonna.

Per ulteriori informazioni, consulta Restrict Amazon Redshift Spectrum external table access to Amazon Redshift IAM users and groups using role chaining (Limitazione dell'accesso di utenti e gruppi IAM di Amazon Redshift alle tabelle esterne di Amazon Redshift Spectrum utilizzando il concatenamento di ruoli) e la Concessione delle autorizzazioni per le risorse del Catalogo dati.

Utilizza la clausola WITH NO SCHEMA BINDING quando crei viste con tabelle esterne

Quando crei una vista che fa riferimento a una tabella esterna, potresti ricevere il seguente messaggio di errore:

"ERROR: External tables are not supported in views".

Per risolvere il problema, crea la vista con la clausola WITH NO SCHEMA BINDING eseguendo questo comando:

CREATE OR REPLACE VIEW view_name AS
SELECT * FROM external_schema_name.external_table_name
WITH NO SCHEMA BINDING ;

Nota: sostituisci external_schema_name con il nome dello schema e external_table_name con il nome della tabella esterna.

Informazioni correlate

SVV_EXTERNAL_SCHEMAS

Parametri per l'uso di CREATE DATABASE con una unità di condivisione dati

Parametri

AWS UFFICIALEAggiornata un anno fa