Passer au contenu

Comment accorder des autorisations d'accès à des schémas externes dans Amazon Redshift ?

Lecture de 6 minute(s)
0

Mes utilisateurs ne peuvent pas accéder aux objets du schéma externe dans mon cluster Amazon Redshift.

Brève description

Lorsque vous utilisez des schémas externes dans Amazon Redshift, les messages d'erreur suivants peuvent s'afficher :

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

Des configurations d'autorisations AWS Lake Formation incorrectes peuvent également provoquer des erreurs avec Amazon Redshift Spectrum. Pour résoudre ce problème, vous devez accorder des autorisations sur les schémas externes, et non au niveau de la table.

Résolution

Accorder l'autorisation d'accéder aux objets du schéma externe

Lorsqu'un utilisateur d'Amazon Redshift n'est pas autorisé à accéder aux objets d'un schéma externe, il peut recevoir l'erreur suivante :

« ERROR: permission denied for schema external_schema_name »

Pour accorder des autorisations à l'utilisateur, procédez comme suit :

  1. Ouvrez la console Amazon Redshift.

  2. Connectez-vous en tant que superutilisateur.

  3. Exécutez la commande suivante pour vérifier les autorisations utilisateur pour le schéma externe auquel ils souhaitent accéder :

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

    Remarque : Remplacez name_of_the_user/role/group par le nom, le rôle ou le groupe de l'utilisateur auquel vous souhaitez accorder l'accès. Remplacez external_schema_name par le nom du schéma externe.

    Si la commande précédente ne renvoie pas le type d'autorisation USAGE, cela signifie que l'utilisateur, le rôle ou le groupe n'est pas autorisé à interroger le schéma externe.

  4. Exécutez l'une des commandes GRANT suivantes pour accorder l’autorisation d’utiliser le schéma externe :

    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;

    Remarque : Remplacez external_schema_name par le nom du schéma externe. Remplacez user_name, role_name ou group_name par l'utilisateur, le rôle ou le groupe auquel vous souhaitez accorder l'accès.

Résoudre les problèmes d'autorisation de partage de données

Lorsque vous tentez d'accorder une autorisation sur des objets d'un schéma externe, le message d'erreur suivant peut s'afficher :

« ERROR: Operation is not supported through datashares ».

Cette erreur se produit dans les situations suivantes :

  • Le schéma externe provient d'une base de données que vous avez créée à partir d'un partage de données.
  • Le partage de données d'origine n'incluait pas la clause WITH PERMISSIONS.

Pour résoudre ce problème, recréez la base de données à partir du partage de données à l'aide de la clause WITH PERMISSION.

Procédez comme suit :

  1. Exécutez la commande suivante pour supprimer la base de données de partage de données existante :

    DROP database database_created_from_datashare_name;

    Remarque : Remplacez database_created_from_datashare_name par le nom de votre base de données.

  2. Exécutez la commande suivante pour recréer la base de données :

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

    Remarque : Remplacez database_created_from_datashare_name par le nom de votre base de données et datashare_name par le nom de votre partage de données. Remplacez account number par votre numéro de compte AWS et namespace_uuid par l'identifiant unique universel (UUID) de votre espace de noms.

  3. Exécutez la commande suivante pour créer le schéma externe :

    CREATE EXTERNAL SCHEMA external_schema_name
    FROM REDSHIFT DATABASE database_created_from_datashare_name
    SCHEMA schema_in_database_created_from_datashare;

    Remarque : Remplacez external_schema_name par le nom du schéma externe et database_created_from_datashare_name par le nom de votre base de données. Remplacez schema_in_database_created_from_datashare par le nom du schéma que vous avez créé à partir d'un partage de données.

  4. Exécutez la commande suivante pour accorder des autorisations d'utilisation :

    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;

    Remarque : Remplacez external_schema_name par le nom du schéma externe. Remplacez user_name par le nom de l'utilisateur auquel vous souhaitez autoriser l'utilisation. Remplacez database_created_from_datashare_name par le nom de la base de données que vous avez créée à partir d'un partage de données, et schema_in_datashare_name par le nom de votre schéma.

  5. Exécutez la commande SELECT suivante pour autoriser l'accès à des tables spécifiques :

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

    Remarque : Remplacez database_created_from_datashare_name par le nom de la base de données que vous avez créée à partir d'un partage de données et schema_in_datashare_name par le nom de votre schéma. Remplacez table_name par le nom de votre table et user_name par votre nom d'utilisateur.

    Pour accorder l'accès à toutes les tables du schéma, exécutez la commande suivante :

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

    Remarque : Remplacez database_created_from_datashare_name par le nom de la base de données que vous avez créée à partir d'un partage de données et schema_in_datashare_name par le nom de votre schéma. Remplacez user_name par votre nom d’utilisateur.

Résoudre les problèmes d'autorisations liés aux schémas externes avec Lake Formation

Vérifiez que vous avez activé Lake Formation pour votre catalogue de données AWS Glue et que le rôle Gestion des identités et des accès AWS (AWS IAM) de votre cluster Amazon Redshift dispose des autorisations de catalogue de données AWS Glue requises.

Pour plus d'informations, consultez les sections Redshift Spectrum et AWS Lake Formation et Gestion des autorisations Lake Formation.

Accorder un contrôle d'accès granulaire à l'aide de schémas externes

Utilisez Lake Formation ou le chaînage de rôles pour accorder un contrôle d'accès granulaire dans Amazon Redshift Spectrum. Vous pouvez accorder des autorisations au niveau du schéma, de la table ou de la colonne.

Pour plus d'informations, consultez les sections Restreindre l'accès aux tables externes Amazon Redshift Spectrum pour les utilisateurs et les groupes Amazon Redshift IAM à l'aide du chaînage de rôles et Octroi d'autorisations sur les ressources du catalogue de données.

Utiliser la clause WITH NO SCHEMA BINDING lorsque vous créez des vues avec des tables externes

Lorsque vous créez une vue qui fait référence à une table externe, le message d'erreur suivant peut s'afficher :

« ERROR: External tables are not supported in views ».

Pour résoudre ce problème, exécutez la commande suivante pour créer la vue avec la clause WITH NO SCHEMA BINDING :

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

Remarque : Remplacez external_schema_name par le nom du schéma externe et external_table_name par le nom de la table externe.

Informations connexes

SVV_EXTERNAL_SCHEMAS

Paramètres d'utilisation de CREATE DATABASE avec un partage de données

Paramètres

AWS OFFICIELA mis à jour il y a 9 mois