Kontrol akses berbasis atribut lintas mesin (ABAC)

Important

ABAC lintas mesin masih dalam Beta.

Engine eksternal dapat membaca tabel Unity Catalog dengan kontrol akses terperinci yang diterapkan. Ini termasuk kebijakan kontrol akses berbasis atribut (ABAC) dan filter baris mandiri dan masker kolom, semuanya diberlakukan secara dinamis bahkan saat mengkueri dari luar Azure Databricks.

Saat mesin eksternal mengkueri tabel dengan kebijakan ABAC, filter baris, atau masker kolom yang terpasang, Azure Databricks menggunakan lapisan komputasi tanpa server khusus untuk memfilter dan mengembalikan data yang dibersihkan ke mesin eksternal.

Requirements

Untuk menerapkan kontrol akses terperinci pada tabel yang dikueri dari mesin eksternal, Anda harus melakukan hal berikut:

Membuat tabel Delta terkelola dengan penerapan katalog

Untuk membuat tabel Delta terkelola yang baru dengan komit katalog (memerlukan Databricks Runtime 16.4 atau yang lebih baru):

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

Untuk meningkatkan tabel terkelola yang ada (memerlukan Databricks Runtime 18.0 ke atas):

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

Setelah membuat tabel, Anda dapat menerapkan kebijakan ABAC, filter baris, atau masker kolom.

Lihat Membuat kebijakan atau Menerapkan filter baris dan masker kolom secara manual.

Membaca tabel dengan Apache Spark (Delta)

Konfigurasikan Apache Spark dengan Delta-Spark 4.1 atau lebih tinggi dan konektor Unity Catalog Spark 0.4 atau lebih tinggi.

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

Note

Atur ServerSidePlanning.enabled ke true untuk mengaktifkan penegakan kontrol akses terperinci oleh mesin eksternal.

Ganti variabel berikut:

  • <uc-catalog-name>: Nama katalog di Unity Catalog yang berisi tabel Anda.
  • <workspace-url>: URL Azure Databricks workspace, termasuk ID ruang kerja.
  • <oauth-token-endpoint>: URL titik akhir token OAuth. Lihat Otorisasi akses prinsipal layanan ke Azure Databricks dengan OAuth.
  • <oauth-client-id>: ID klien OAuth untuk prinsipal autentikasi.
  • <oauth-client-secret>: Rahasia klien OAuth untuk prinsipal autentikasi.

Membaca tabel dengan Apache Spark (Iceberg)

Konfigurasikan Apache Spark dengan Iceberg-Spark 1.11 atau lebih tinggi dan Apache Spark 4.0 atau lebih tinggi.

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

Ganti variabel berikut:

  • <uc-catalog-name>: Nama katalog di Unity Catalog yang berisi tabel Anda.
  • <workspace-url>: URL Azure Databricks workspace, termasuk ID ruang kerja.
  • <oauth-token-endpoint>: URL titik akhir token OAuth. Lihat Otorisasi akses prinsipal layanan ke Azure Databricks dengan OAuth.
  • <oauth-client-id>: ID klien OAuth untuk prinsipal autentikasi.
  • <oauth-client-secret>: Rahasia klien OAuth untuk prinsipal autentikasi.

Mencari data

Anda dapat mengkueri tabel menggunakan Api Apache Spark SQL atau DataFrame. Azure Databricks menerapkan kebijakan akses terperinci di belakang layar.

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

Warning

Operasi tulis secara bersamaan saat perencanaan kueri dapat menyebabkan tabel yang sama dibaca dari snapshot tabel yang berbeda dalam kueri self-join dan multi-scan, yang pada akhirnya dapat menghasilkan hasil yang keliru.

Biaya komputasi tanpa server

ABAC lintas-engine menggunakan sumber daya komputasi serverless untuk menegakkan kebijakan akses yang terperinci di sisi server. Pelanggan dikenakan biaya untuk sumber daya ini. Untuk informasi harga, lihat Harga produk Beta.

Pengguna dengan akses ke tabel sistem penagihan dapat system.billing.usage meminta untuk melihat berapa banyak mereka telah ditagih. Misalnya, kueri berikut memecah biaya komputasi berdasarkan pengguna:

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;

Keterbatasan

  • Hanya operasi baca yang didukung dari mesin eksternal saat kontrol akses terperinci (FGAC) diterapkan. Untuk menulis, Anda harus mengecualikan prinsipal penulisan dari kebijakan ABAC.
  • Tampilan dinamis tidak didukung.
  • Proyeksi kolom VARIANT tidak didukung.
  • Pemfilteran pada BINARY kolom tidak didukung.
  • Fungsi penyamaran kolom yang jenis pengembaliannya berbeda dari jenis kolom asli tidak didukung.
  • Agregasi besar mungkin mengalami penurunan performa.