Important
엔진 간 ABAC는 베타 버전입니다.
외부 엔진은 ABAC(특성 기반 액세스 제어) 정책이 적용된 Unity 카탈로그 테이블을 읽을 수 있습니다. 이렇게 하면 외부 Azure Databricks 쿼리하는 경우에도 동적으로 적용되는 ABAC 행 필터 및 열 마스크를 적용할 수 있습니다.
외부 엔진이 ABAC 정책이 연결된 테이블을 쿼리하는 경우 Azure Databricks 특수 서버리스 컴퓨팅 계층을 사용하여 삭제된 데이터를 필터링하고 외부 엔진으로 반환합니다.
Requirements
외부 엔진에서 쿼리된 테이블에 세분화된 액세스 제어를 적용하려면 다음을 완료해야 합니다.
- Unity 카탈로그 메타스토어에서 외부 데이터 액세스를 사용하도록 설정합니다.
- 쿼리 주체에게 권한을 부여합니다
EXTERNAL USE SCHEMA. - 카탈로그 커밋과 함께 관리되는 테이블을 사용합니다.
- OAuth M2M(컴퓨터-컴퓨터) 또는 PAT(개인용 액세스 토큰)를 사용하여 인증합니다.
카탈로그 커밋을 사용하여 관리되는 델타 테이블 만들기
카탈로그 커밋을 사용하여 관리되는 새 델타 테이블을 만들려면(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.enabled를 true(으)로 설정하십시오.
다음 변수를 대체합니다.
-
<uc-catalog-name>: 테이블을 포함하는 Unity 카탈로그의 이름입니다. -
<workspace-url>: Azure Databricks 작업 영역 ID를 포함한 작업 영역 URL입니다. -
<oauth-token-endpoint>: OAuth 토큰 엔드포인트 URL입니다. OAuth를 사용하여 Azure Databricks에 대한 서비스 주체 액세스 권한 부여를 참조하세요. -
<oauth-client-id>: 인증 주체에 대한 OAuth 클라이언트 ID입니다. -
<oauth-client-secret>: 인증 주체에 대한 OAuth 클라이언트 암호입니다.
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>"
다음 변수를 대체합니다.
-
<uc-catalog-name>: 테이블을 포함하는 Unity 카탈로그의 이름입니다. -
<workspace-url>: Azure Databricks 작업 영역 ID를 포함한 작업 영역 URL입니다. -
<oauth-token-endpoint>: OAuth 토큰 엔드포인트 URL입니다. OAuth를 사용하여 Azure Databricks에 대한 서비스 주체 액세스 권한 부여를 참조하세요. -
<oauth-client-id>: 인증 주체에 대한 OAuth 클라이언트 ID입니다. -
<oauth-client-secret>: 인증 주체에 대한 OAuth 클라이언트 암호입니다.
쿼리 데이터
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열에 대한 필터링은 지원되지 않습니다. - 반환 형식이 원래 열 형식과 다른 열 마스킹 함수는 지원되지 않습니다.
- 대규모 집계는 성능 저하를 경험할 수 있습니다.