Magasin de métadonnées du service de catalogue de données

Apache Hive est un cadre d'entreposage de données qui facilite les opérations de lecture, d'écriture ou de gestion sur des jeux de données volumineux qui résident dans des systèmes répartis.

Le magasin de métadonnées du catalogue de données fournit un référentiel central de métadonnées hautement disponible et évolutif pour une grappe Hive. Il stocke les métadonnées des structures de données telles que les bases de données, les tables et les partitions dans une base de données relationnelle, en s'appuyant sur des fichiers gérés dans le service de stockages d'objets. Apache Spark SQL utilise le magasin de métadonnées du catalogue de données à cette fin.

Le service de flux de données OCI, le service de mégadonnées OCI et les instances du service de science des données OCI accèdent au magasin de métadonnées du service de catalogue de données pour stocker et extraire en toute sécurité les définitions de schéma des objets dans des ressources de données non structurées et semi-structurées, telles que le service de stockage d'objets.

Préalables

Avant de créer un magasin de métadonnées dans le service de catalogue de données, vous devez créer deux seaux dans le service de stockage d'objets Oracle, pour contenir les tables gérées et externes.
  • Table gérée : Le magasin de métadonnées gère l'objet de table.
  • Table externe : En tant qu'utilisateur, vous gérez l'objet de table.

Lors de la création du magasin de métadonnées dans le service de catalogue de données, vous fournissez les URI des seaux dans lesquels résident les tables gérées et externes. Le format de l'URI doit être oci://<bucket_name>@<namespace_name>/<folder name of your choice>.

Note

Nous vous recommandons de ne pas utiliser le même emplacement pour les tables gérées et externes. Si les deux types de table se trouvent dans le même répertoire, la suppression des données des tables gérées peut également entraîner la perte de données des tables externes.

Pour plus d'informations, voir Connecteur HDFS.

Politiques GIA requises

Vous devez ajouter des politiques pour permettre au principal de ressource du magasin de métadonnées d'accéder aux emplacements de stockage.

Au préalable, créez un groupe dynamique incluant le magasin de métadonnées. Dans les énoncés de politique suivants, son OCID est représenté par <dg-metastore-ocid> :
ALLOW dynamic-group <dg-metastore-ocid> to read buckets in tenancy where any {all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}, all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}}
ALLOW dynamic-group <dg-metastore-ocid> to manage objects in tenancy where all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}
ALLOW dynamic-group <dg-metastore-ocid> to read objects in tenancy where all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}
Note

Pour permettre au magasin de métadonnées de créer dynamiquement des seaux par base de données à l'aide du paramètre spark.conf oci.dcat.metastore.create.bucket.per.db = true, ajoutez les politiques suivantes :
ALLOW dynamic-group <dg-metastore-ocid> to manage buckets in tenancy where any {all {target.bucket.name='<managed-table-location-bucket>', request.region='<managed-table-location-bucket-region>'}}
ALLOW dynamic-group <dg-metastore-ocid> to read buckets in tenancy where any {all {target.bucket.name='<external-table-location-bucket>', request.region='<external-table-location-bucket-region>'}}

Seuls Admin et les utilisateurs du groupe Administrators ont accès à toutes les ressources de magasin de métadonnées du catalogue de données. En tant que Admin, vous pouvez utiliser les politiques suivantes pour fournir l'accès à toutes les ressources du magasin de métadonnées.

allow <any-user> to manage data-catalog-metastore-assets in compartment <compartment-name>
allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name>

Ces stratégies sont obligatoires, sauf si des stratégies grossières sont définies pour des ressources de catalogue, de base de données ou de table. Pour plus d'informations, voir Politiques IAM requises pour le contrôle d'accès de niveau grossier.

Contrôle d'accès grossier dans le magasin de métadonnées du catalogue de données

Le magasin de métadonnées du catalogue de données fournit un contrôle d'accès grossier à l'aide du service de gestion des identités et des accès pour éviter un accès accidentel et la modification des ressources créées par un autre utilisateur. En tant qu'administrateur, vous pouvez accorder l'accès à des ressources telles que des catalogues, des bases de données et des tables à l'aide des politiques prédéfinies mentionnées dans la liste des ressources de la page des détails du magasin de métadonnées. Pour plus d'informations sur la consultation des ressources de magasin de métadonnées, voir Consultation de la liste des ressources de magasin de métadonnées.
Note

Par défaut, le contrôle d'accès de niveau grossier est désactivé. Vous devez donc définir les politiques requises pour accéder à toutes les ressources du magasin de métadonnées. Voir Politiques IAM requises. Après avoir défini ces politiques, réglez le paramètre Spark.Conf à true. Pour les solutions basées sur Hive ou HiveServer2, définissez oci.dcat.metastore.enable.cgac = true. Pour les solutions basées sur Spark ou Spark, définissez spark.hadoop.oci.dcat.metastore.enable.cgac = true.

Politiques IAM requises pour le contrôle d'accès de niveau grossier

Utilisez les politiques suivantes pour fournir l'accès aux ressources de catalogue, de base de données ou de table :

Note

  • L'application de politiques au niveau de la base de données ou de la table nécessite une autorisation pour gérer <hive-default>.
  • Lorsque des politiques sont appliquées au niveau de la base de données ou de la table, les utilisateurs du groupe ne peuvent pas voir ni lister les bases de données et les tables créées par un autre utilisateur.

Autoriser l'accès aux ressources de niveau catalogue :

  • Utilisation de target.metastore.catalog.name
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
  • Utilisation de target.metastore.catalog.key
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.key = '<metastore-catalog-key>'}
    Note

    Le nom, la clé et l'exemple d'énoncé de politique sont disponibles dans la page du magasin de métadonnées sous la section Ressources.
    Lors de la création d'une politique pour un nouveau catalogue, vous devez également créer une politique pour la base de données par défaut créée dans le cadre de ce catalogue.
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = <metastore-catalog-name.default>}

Autoriser un utilisateur <specific-group> à accéder aux ressources de base de données ou de table pour un catalogue spécifique, où l'utilisateur a accès aux ressources enfants de ce catalogue :

  • Utilisation de target.metastore.catalog.name
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<metastore-catalog-name.default>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '*'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.name = '*'}
  • Utilisation de target.metastore.catalog.key
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.key = '<catalog-ID>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = <metastore-catalog-name.default>}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.key = '*'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.key = '*'}

Autorisez une instance <specific-group> à accéder aux ressources de niveau base de données pour un catalogue spécifique en appliquant l'une des politiques suivantes :

  • Utilisation de target.metastore.database.name
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<catalog-name>.<database-name>'}
  • Utilisation de target.metastore.database.key
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.key = '<metastore-database-ID>'}

Autorisez une instance <specific-group> à accéder aux ressources de niveau table pour une base de données spécifique en appliquant l'une des politiques suivantes :

  • Utilisation de target.metastore.table.name
    allow group <any-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.catalog.name = '<metastore-catalog-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.database.name = '<catalog-name>.<database-name>'}
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.name = '<catalog-name>.<database-name>.<table-name>'}
  • Utilisation de target.metastore.table.key
    allow group <specific-group> to manage data-catalog-metastore-assets in compartment <compartment-name> where all {target.metastore.id = '<metastore-id>', target.metastore.table.key = '<metastore-table-ID>'}