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
- 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>
.
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.
<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>'}
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
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 :
- 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>'}
Ressources supplémentaires
Voici quelques ressources que vous pouvez utiliser pour en savoir plus sur les magasins de métadonnées :
Publication de blogue