Controlli di accesso basati su attributi tra motori

I motori esterni possono leggere le tabelle di Unity Catalog con controlli di accesso granulari applicati. Sono inclusi sia i criteri di controllo degli accessi in base agli attributi chei filtri di riga autonomi e le maschere di colonna, tutti applicati dinamicamente anche quando si eseguono query dall'esterno di Azure Databricks.

Quando un motore esterno interroga una tabella a cui sono associati criteri ABAC, filtri di riga o maschere di colonna, Azure Databricks usa un livello di elaborazione serverless specializzato per filtrare e restituire dati ripuliti al motore esterno.

Requirements

Per applicare controlli di accesso con granularità fine sulle tabelle sottoposte a query dai motori esterni, è necessario completare le operazioni seguenti:

Creare una tabella Delta gestita con commit nel catalogo

Per creare una nuova tabella Delta gestita con commit del catalogo (richiede Databricks Runtime 16.4 e versioni successive):

CREATE TABLE <catalog>.<schema>.<table> (id INT, name STRING)
USING delta
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

Per aggiornare una tabella gestita esistente (richiede Databricks Runtime 18.0 e versioni successive):

ALTER TABLE <catalog>.<schema>.<table>
SET TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported');

Dopo aver creato la tabella, è possibile applicare policy ABAC, filtri di riga o maschere di colonna.

Vedere Creare un criterio o Applicare manualmente filtri di riga e maschere di colonna.

Leggere le tabelle con Apache Spark (Delta)

Configurare Apache Spark con Delta-Spark 4.1 o versione successiva e il connettore Spark del catalogo Unity 0.4 o versione successiva.

"spark.sql.extensions": "io.delta.sql.DeltaSparkSessionExtension",
"spark.sql.catalog.spark_catalog": "org.apache.spark.sql.delta.catalog.DeltaCatalog",
"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.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-azure:3.4.2"

Annotazioni

Impostare ServerSidePlanning.enabled su true per abilitare l'applicazione granulare del controllo degli accessi da motori esterni.

Sostituire le variabili seguenti:

Leggere tabelle con Apache Spark (Iceberg)

Configurare Apache Spark con Iceberg-Spark 1.11 o versione successiva e Apache Spark 4.0 o versione successiva.

"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>"

Sostituire le variabili seguenti:

Dati di query

È possibile eseguire query sulla tabella usando LE API APACHE Spark SQL o DataFrame. Azure Databricks applica criteri di accesso con granularità fine in background.

SELECT * FROM <uc-catalog-name>.<schema>.<table>;

Avvertimento

Le scritture simultanee durante la pianificazione delle query possono causare la lettura della stessa tabella da snapshot diversi della stessa tabella nelle query self-join e con scansioni multiple, con possibili risultati non corretti.

Costi di calcolo serverless

L'ABAC multimotore utilizza risorse di calcolo serverless per applicare sul server criteri di accesso granulari. I clienti vengono addebitati per queste risorse. Per informazioni sui prezzi, vedi Prezzi ABAC cross-engine.

Gli utenti con accesso alla tabella del sistema di fatturazione possono eseguire query system.billing.usage per verificare quanto sono stati addebitati. Ad esempio, la query seguente suddivide i costi di calcolo per utente:

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

  • I motori esterni supportano solo le operazioni di lettura quando sono applicati controlli di accesso granulari (FGAC). Per scrivere, è necessario esentare l'entità principale di scrittura dal criterio ABAC.
  • Le visualizzazioni dinamiche non sono supportate.
  • La proiezione di VARIANT colonne non è supportata.
  • L'applicazione di filtri alle colonne BINARY non è supportata.
  • Le funzioni di maschera di colonna il cui tipo restituito differisce dal tipo di colonna originale non sono supportate.
  • Le aggregazioni di grandi dimensioni potrebbero subire una riduzione delle prestazioni.