Controlli di accesso basati su attributi tra motori

Importante

L'ABAC cross-engine è in versione Beta.

I motori esterni possono leggere le tabelle del catalogo Unity con i criteri ABAC (Attribute-Based Access Controls) applicati. In questo modo è possibile applicare filtri di riga ABAC e maschere di colonna applicati in modo dinamico, anche quando si eseguono query dall'esterno Azure Databricks.

Quando un motore esterno esegue una query su una tabella con criteri ABAC collegati, Azure Databricks usa un livello di calcolo serverless specializzato per filtrare e restituire dati sanificati 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)
TBLPROPERTIES ('delta.feature.catalogManaged' = 'supported') USING delta;

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": "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.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, vedere Prezzi dei prodotti beta.

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.