Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
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:
- Abilitare l'accesso ai dati esterni nel metastore di Unity Catalog.
- Concedi all'entità che esegue la query il privilegio
EXTERNAL USE SCHEMA. - Usare una tabella gestita con commit del catalogo.
- Eseguire l'autenticazione tramite OAuth da computer a computer (M2M) o un token di accesso personale (PAT).
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:
-
<uc-catalog-name>: nome del catalogo in Unity Catalog che contiene le tabelle. -
<workspace-url>: URL dell'area di lavoro di Azure Databricks, incluso l'ID dell'area di lavoro. -
<oauth-token-endpoint>: URL dell'endpoint del token OAuth. Consulta Autorizzare l'accesso del principale del servizio ad Azure Databricks con OAuth. -
<oauth-client-id>: ID client OAuth per il principale di autenticazione. -
<oauth-client-secret>: Segreto del client OAuth per il principale di autenticazione.
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:
-
<uc-catalog-name>: nome del catalogo in Unity Catalog che contiene le tabelle. -
<workspace-url>: URL dell'area di lavoro di Azure Databricks, incluso l'ID dell'area di lavoro. -
<oauth-token-endpoint>: URL dell'endpoint del token OAuth. Consulta Autorizzare l'accesso del principale del servizio ad Azure Databricks con OAuth. -
<oauth-client-id>: ID client OAuth per il principale di autenticazione. -
<oauth-client-secret>: Segreto del client OAuth per il principale di autenticazione.
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
VARIANTcolonne non è supportata. - L'applicazione di filtri alle colonne
BINARYnon è 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.