Contrôles d'accès inter-moteurs basés sur les attributs (ABAC)
Bêta
L’ABAC inter-moteur est en Bêta.
Les moteurs externes peuvent lire les tables Unity Catalog avec des contrôles d'accès précis appliqués. Cela inclut à la fois les politiques de contrôles d'accès basés sur les attributs (ABAC) et les filtres de lignes et masques de colonnes autonomes, tous appliqués dynamiquement même lors de l'interrogation depuis l'extérieur de Databricks.
Lorsqu'un moteur externe interroge une table avec des stratégies ABAC, des filtres de lignes ou des masques de colonne associés, Databricks utilise une couche de compute Serverless spécialisée pour filtrer et renvoyer les données assainies au moteur externe.
Exigences
Pour appliquer des contrôles d'accès précis sur les tables interrogées à partir de moteurs externes, vous devez effectuer les opérations suivantes :
- Activez l'accès aux données externes sur votre métastore Unity Catalog.
- Accordez au principal de query le privilège
EXTERNAL USE SCHEMA. - Utilisez une table gérée avec des commits de catalogue.
- Authentifiez-vous à l'aide d'OAuth machine à machine (M2M) ou d'un jeton d'accès personnel (PAT).
Créer une table Delta gérée avec des commits de catalogue
Pour créer une nouvelle table Delta gérée avec des commits de catalogue (nécessite Databricks Runtime 16.4 et versions supérieures) :
CREATE TABLE <catalog>.<schema>.<table> (id INT, name STRING)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;
Pour mettre à niveau une table gérée existante (nécessite Databricks Runtime 18.0 et versions ultérieures) :
ALTER TABLE <catalog>.<schema>.<table>
SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');
Après avoir créé la table, vous pouvez appliquer des politiques ABAC, des filtres de ligne ou des masques de colonne.
Consultez Créer une politique ou Appliquer manuellement des filtres de ligne et des masques de colonne.
Lire les tables avec Apache Spark (Delta)
Configurez Apache Spark avec Delta-Spark 4,1 ou supérieur et le connecteur Spark Unity Catalog 0,4 ou supérieur.
"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>": "io.unitycatalog.spark.UCSingleCatalog",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>",
"spark.sql.catalog.<uc-catalog-name>.auth.type": "oauth",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientId": "<oauth-client-id>",
"spark.sql.catalog.<uc-catalog-name>.auth.oauth.clientSecret": "<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.ServerSidePlanning.enabled": "true",
"spark.sql.defaultCatalog": "<uc-catalog-name>",
"spark.hadoop.fs.s3.impl": "org.apache.hadoop.fs.s3a.S3AFileSystem",
"spark.jars.packages": "io.delta:delta-spark_4.0_2.13:4.1.0,io.delta:delta-iceberg_2.13:4.1.0,io.unitycatalog:unitycatalog-spark_2.13:0.4.0,org.apache.hadoop:hadoop-aws:3.4.1"
Définissez ServerSidePlanning.enabled sur true pour activer l'application du contrôle d'accès précis à partir de moteurs externes.
Substituez les variables suivantes :
<uc-catalog-name>: le nom du catalogue dans Unity Catalog qui contient vos tables.<workspace-url>: L'URL du Workspace Databricks, y compris l'ID du Workspace.<oauth-token-endpoint>: URL de l'Endpoint du jeton OAuth. Consultez Autoriser l'accès de service principal à Databricks avec OAuth.<oauth-client-id>: ID client OAuth pour le principal d'authentification.<oauth-client-secret>: secret client OAuth pour le principal d'authentification.
Lire les tables avec Apache Spark (Iceberg)
Configurez Apache Spark avec Iceberg-Spark 1.11 ou supérieur et Apache Spark 4.0 ou supérieur.
"spark.sql.extensions": "org.apache.iceberg.spark.extensions.IcebergSparkSessionExtensions",
"spark.sql.catalog.<uc-catalog-name>": "org.apache.iceberg.spark.SparkCatalog",
"spark.sql.catalog.<uc-catalog-name>.type": "rest",
"spark.sql.catalog.<uc-catalog-name>.uri": "<workspace-url>/api/2.1/unity-catalog/iceberg-rest/",
"spark.sql.catalog.<uc-catalog-name>.credential": "<oauth-client-id>:<oauth-client-secret>",
"spark.sql.catalog.<uc-catalog-name>.oauth2-server-uri": "<oauth-token-endpoint>",
"spark.sql.catalog.<uc-catalog-name>.warehouse": "<uc-catalog-name>",
"spark.sql.catalog.<uc-catalog-name>.cache-enabled": "false",
"spark.sql.defaultCatalog": "<uc-catalog-name>"
Substituez les variables suivantes :
<uc-catalog-name>: le nom du catalogue dans Unity Catalog qui contient vos tables.<workspace-url>: L'URL du Workspace Databricks, y compris l'ID du Workspace.<oauth-token-endpoint>: URL de l'Endpoint du jeton OAuth. Consultez Autoriser l'accès de service principal à Databricks avec OAuth.<oauth-client-id>: ID client OAuth pour le principal d'authentification.<oauth-client-secret>: secret client OAuth pour le principal d'authentification.
Query des données
Vous pouvez interroger la table à l’aide des APIs Apache Spark SQL ou DataFrame. Databricks applique des politiques d'accès précis en arrière-plan.
SELECT * FROM <uc-catalog-name>.<schema>.<table>;
Les écritures concurrentes pendant la planification des requêtes peuvent entraîner la lecture de la même table à partir de différents instantanés de table dans des requêtes de jointure automatique et multi-analyses, ce qui peut potentiellement générer des résultats incorrects.
Coûts du compute Serverless
ABAC inter-moteur utilise les ressources de compute Serverless pour appliquer des politiques d'accès granulaire côté serveur. Ces ressources sont facturées aux clients. Pour plus d'informations sur les tarifs, consultez Tarifs des produits en version bêta.
Les utilisateurs ayant accès à la table du système de facturation peuvent interroger system.billing.usage pour voir combien ils ont été facturés. Par exemple, la query suivante ventile les coûts de compute par utilisateur :
SELECT usage_date,
sku_name,
identity_metadata.run_as,
SUM(usage_quantity) AS `DBUs consumed by cross-engine ABAC`
FROM system.billing.usage
WHERE usage_date BETWEEN '2026-06-01' AND '2026-07-01'
AND billing_origin_product = 'EXTERNAL_COMPATIBILITY'
GROUP BY 1, 2, 3 ORDER BY 1;
Limitations
- Seules les lectures sont prises en charge à partir de moteurs externes lorsque les contrôles d'accès précis (FGAC) sont appliqués. Pour écrire, vous devez exempter le principal d’écriture de la politique ABAC.
- Les vues dynamiques ne sont pas prises en charge.
- La projection de
VARIANTcolonnes n'est pas prise en charge. - Le filtrage sur
BINARYcolonnes n'est pas pris en charge. - Les fonctions de masquage de colonne dont le type de retour diffère du type de colonne d’origine ne sont pas prises en charge.
- Les agrégations importantes pourraient subir une dégradation des performances.