Ir para o conteúdo

Como faço para conceder permissões de acesso a esquemas externos no Amazon Redshift?

6 minuto de leitura
0

Meus usuários não podem acessar objetos no esquema externo em meu cluster do Amazon Redshift.

Breve descrição

Ao usar esquemas externos no Amazon Redshift, você pode receber as seguintes mensagens de erro:

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

Configurações incorretas de permissões do AWS Lake Formation também podem causar erros com o Amazon Redshift Spectrum. Para resolver esse problema, você deve conceder permissões nos esquemas externos, não no nível da tabela.

Resolução

Conceder permissão para acessar objetos no esquema externo

Quando um usuário do Amazon Redshift não tem permissão para acessar objetos em um esquema externo, ele pode receber o seguinte erro:

“ERROR: permission denied for schema external_schema_name”

Para conceder permissões ao usuário, conclua as seguintes etapas:

  1. Abra o console do Amazon Redshift.

  2. Faça login como superusuário.

  3. Execute o comando a seguir para verificar as permissões do usuário para o esquema externo que eles desejam acessar:

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

    Observação: substitua o name_of_the_user/role/group pelo nome, perfil ou grupo do usuário ao qual você deseja conceder acesso. Substitua external_schema_name pelo nome do esquema externo.

    Se o comando anterior não retornar o tipo de permissão USAGE, o usuário, o perfil ou o grupo não terá permissão para consultar o esquema externo.

  4. Execute um dos seguintes comandos GRANT para conceder permissão para usar o esquema externo:

    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;

    Observação: substitua external_schema_name pelo nome do esquema externo. Substitua user_name, role_name ou group_name pelo usuário, perfil ou grupo ao qual você deseja conceder acesso.

Resolver problemas de permissão da unidade de compartilhamento de dados

Ao tentar conceder permissão em objetos em um esquema externo, você pode receber a seguinte mensagem de erro:

“ERROR: Operation is not supported through datashares”.

Esse erro ocorre nas seguintes situações:

  • O esquema externo é de um banco de dados que você criou a partir da unidade de compartilhamento de dados.
  • A unidade de compartilhamento de dados original não incluía a cláusula WITH PERMISSIONS.

Para resolver esse problema, recrie o banco de dados a partir da unidade de compartilhamento de dados com a cláusula WITH PERMISSION.

Conclua as seguintes etapas:

  1. Execute o comando a seguir para descartar o banco de dados da unidade de compartilhamento de dados existente:

    DROP database database_created_from_datashare_name;

    Observação: substitua o database_created_from_datashare_name pelo nome do seu banco de dados.

  2. Execute o comando a seguir para recriar o banco de dados:

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

    Observação: substitua o database_created_from_datashare_name pelo nome do seu banco de dados e datashare_name pelo nome da sua unidade de compartilhamento de dados. Substitua o número da conta pelo número da sua conta da AWS e o namespace_uuid pelo Identificador Único Universal (UUID) do seu namespace.

  3. Execute o comando a seguir para criar o esquema externo:

    CREATE EXTERNAL SCHEMA external_schema_name
    FROM REDSHIFT DATABASE database_created_from_datashare_name
    SCHEMA schema_in_database_created_from_datashare;

    Observação: substitua external_schema_name pelo nome do esquema externo e o database_created_from_datashare_name pelo nome do seu banco de dados. Substitua o schema_in_database_created_from_datashare pelo nome do esquema que você criou a partir de uma unidade de compartilhamento de dados.

  4. Execute o comando a seguir para conceder permissões de uso:

    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;

    Observação: substitua external_schema_name pelo nome do esquema externo. Substitua user_name pelo nome do usuário ao qual você deseja conceder uso. Substitua o database_created_from_datashare_name pelo nome do seu banco de dados que você criou a partir de uma unidade de compartilhamento de dados e schema_in_datashare_name pelo nome do seu esquema.

  5. Execute o seguinte comando SELECT para conceder permissão para acessar tabelas específicas:

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

    Observação: substitua o database_created_from_datashare_name pelo nome do banco de dados que você criou a partir de uma unidade de compartilhamento de dados e do schema_in_datashare_name pelo nome do seu esquema. Substitua table_name pelo nome da sua tabela e user_name pelo seu nome de usuário.

    Para conceder acesso a todas as tabelas no esquema, execute o seguinte comando:

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

    Observação: substitua o database_created_from_datashare_name pelo nome do banco de dados que você criou a partir de uma unidade de compartilhamento de dados e do schema_in_datashare_name pelo nome do seu esquema. Substitua user_name pelo seu nome de usuário.

Resolva esquemas externos com problemas de permissões de Lake Formation

Verifique se você ativou o Lake Formation para seu catálogo de dados do AWS Glue e se o perfil do AWS Identity and Access Management (AWS IAM) do cluster Amazon Redshift tem as permissões necessárias do catálogo de dados do AWS Glue.

Para obter mais informações, consulte as permissões Redshift Spectrum e AWS Lake Formation and Managing Lake Formation.

Conceda controle de acesso granular com esquemas externos

Use o Lake Formation ou o encadeamento de funções para conceder controle de acesso granular no Amazon Redshift Spectrum. É possível conceder permissões no nível do esquema, da tabela ou da coluna.

Para obter mais informações, consulte Restringir o acesso à tabela externa do Amazon Redshift Spectrum a usuários e grupos do Amazon Redshift IAM usando o encadeamento de funções e Concedendo permissões em recursos do catálogo de dados.

Use a cláusula WITH NO SCHEMA BINDING ao criar visualizações com tabelas externas

Ao criar uma exibição que faz referência a uma tabela externa, você pode receber a seguinte mensagem de erro:

“ERROR: External tables are not supported in views”.

Para resolver esse problema, execute o comando a seguir para criar a exibição com a cláusula WITH NO SCHEMA BINDING:

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

Observação: substitua external_schema_name pelo nome do esquema externo e external_table_name pelo nome da tabela externa.

Informações relacionadas

SVV_EXTERNAL_SCHEMAS

Parâmetros para usar CREATE DATABASE com uma unidade de compartilhamento de dados

Parâmetros

AWS OFICIALAtualizada há 10 meses