ABAC(크로스 엔진 특성 기반 액세스 제어)

Important

엔진 간 ABAC는 베타 버전입니다.

외부 엔진은 ABAC(특성 기반 액세스 제어) 정책이 적용된 Unity 카탈로그 테이블을 읽을 수 있습니다. 이렇게 하면 외부 Azure Databricks 쿼리하는 경우에도 동적으로 적용되는 ABAC 행 필터 및 열 마스크를 적용할 수 있습니다.

외부 엔진이 ABAC 정책이 연결된 테이블을 쿼리하는 경우 Azure Databricks 특수 서버리스 컴퓨팅 계층을 사용하여 삭제된 데이터를 필터링하고 외부 엔진으로 반환합니다.

Requirements

외부 엔진에서 쿼리된 테이블에 세분화된 액세스 제어를 적용하려면 다음을 완료해야 합니다.

카탈로그 커밋을 사용하여 관리되는 델타 테이블 만들기

카탈로그 커밋을 사용하여 관리되는 새 델타 테이블을 만들려면(Databricks Runtime 16.4 이상이 필요)

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

기존 관리되는 테이블을 업그레이드하려면(Databricks Runtime 18.0 이상이 필요)

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

테이블을 만든 후 ABAC 정책, 행 필터 또는 열 마스크를 적용할 수 있습니다.

정책 만들기를 참조하거나 행 필터 및 열 마스크를 수동으로 적용합니다.

Apache Spark를 사용하여 테이블 읽기(델타)

Delta-Spark 4.1 이상Unity Catalog Spark 커넥터 0.4 이상을 사용하여 Apache Spark를 구성합니다.

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

메모

외부 엔진의 세분화된 액세스 제어 시행을 활성화하려면 ServerSidePlanning.enabledtrue(으)로 설정하십시오.

다음 변수를 대체합니다.

Apache Spark로 테이블 읽기(Iceberg)

Iceberg-Spark 1.11 이상 및 Apache Spark 4.0 이상을 사용하여 Apache Spark를 구성합니다.

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

다음 변수를 대체합니다.

쿼리 데이터

Apache Spark SQL 또는 DataFrame API를 사용하여 테이블을 쿼리할 수 있습니다. Azure Databricks 백그라운드에서 세분화된 액세스 정책을 적용합니다.

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

경고

쿼리 계획 중에 동시 쓰기를 수행하면 자체 조인 및 다중 검색 쿼리의 여러 테이블 스냅샷에서 동일한 테이블을 읽을 수 있으므로 결과가 잘못될 수 있습니다.

서버리스 컴퓨팅 비용

엔진 간 ABAC는 서버리스 컴퓨팅 리소스를 사용하여 서버 쪽의 세분화된 액세스 정책을 적용합니다. 고객은 이러한 리소스에 대한 요금이 청구됩니다. 가격 책정 정보는 베타 제품 가격을 참조하세요.

청구 시스템 테이블에 액세스할 수 있는 사용자는 청구된 금액에 대해 쿼리 system.billing.usage 할 수 있습니다. 예를 들어 다음 쿼리는 사용자별 컴퓨팅 비용을 분류합니다.

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

  • FGAC(세분화된 액세스 제어)가 적용되는 경우 외부 엔진에서 읽기만 지원됩니다. 작성하려면 ABAC 정책에서 쓰기 주체를 제외해야 합니다.
  • 동적 보기는 지원되지 않습니다.
  • 열 프로젝팅 VARIANT 은 지원되지 않습니다.
  • BINARY 열에 대한 필터링은 지원되지 않습니다.
  • 반환 형식이 원래 열 형식과 다른 열 마스킹 함수는 지원되지 않습니다.
  • 대규모 집계는 성능 저하를 경험할 수 있습니다.