# Databricks 2026년 8월: RBAC GA·관리형 Iceberg 공유 GA·DML 최소권한으로 달라진 데이터 거버넌스 경계
요약
Databricks가 2026년 8월 릴리스에서 거버넌스 제어면에 세 가지 중요한 변화를 도입했다.
- RBAC(역할 기반 접근 제어) GA: 사용자가 역할을 가정(assume)하면 그 역할의 권한만 적용되고 본인 누적 권한은 일시 차단된다. 감사 로그에
run_by(실사용자)와run_as(역할)가 분리 기록된다.
- 관리형 Iceberg 테이블 공유 GA: Databricks-to-Databricks 공유뿐 아니라 외부 Iceberg 클라이언트(Spark, Trino, Flink 등)에 관리형 Iceberg 테이블을 개방할 수 있게 됐다.
- Unity Catalog DML 최소권한 Beta:
MODIFY권한 대신INSERT,UPDATE,DELETE를 개별로 부여하는 세분화된 쓰기 권한이 도입됐다.
이 세 변화는 각각 독립적으로 동작하지만, 함께 사용하면 데이터 플랫폼의 권한 경계를 더 좁고 감사 가능하게 만든다.
RBAC GA: 권한 덮기와 신원 분리
기존 문제: 누적 권한 모델의 위험
Databricks 기존 모델에서 사용자는 본인에게 할당된 모든 권한을 항상 동시에 행사할 수 있다. 데이터 엔지니어가 여러 프로젝트(임상 시험 A, 임상 시험 B, 재무 데이터)에 접근 권한을 가진 경우, 어느 작업을 실행하든 세 프로젝트 모두에 동시에 접근할 수 있다.
이는 실수로 잘못된 테이블을 읽거나 쓰는 위험을 낳는다. 컴플라이언스 요건(HIPAA, GxP 등)이 있는 환경에서는 "이 작업은 임상 시험 A 데이터만 접근해야 한다"는 격리 보장을 기술적으로 강제할 수 없었다.
RBAC 역할 가정의 동작 방식
RBAC GA 이후 사용자는 작업 전에 역할을 명시적으로 가정(assume) 해야 한다.
-- 역할 목록 확인
SHOW ROLES;
-- 역할 가정 (이 세션에서 user 권한은 비활성화)
ASSUME ROLE clinical_trial_a_engineer;
-- 이 세션에서는 clinical_trial_a_engineer 권한만 적용됨
SELECT * FROM catalog_a.clinical_data.patients LIMIT 10;
-- 역할 해제
RELEASE ROLE clinical_trial_a_engineer;역할을 가정한 동안:
- 사용자 본인의 권한은 대체되지 않고 일시 차단(not combined) 된다.
catalog_a접근 권한이 있는clinical_trial_a_engineer역할을 가정했더라도catalog_b에는 접근할 수 없다.- 작업이 끝나면 역할을 해제해야 한다. 그렇지 않으면 세션 종료 시 자동 해제된다.
ABAC(속성 기반 접근 제어)와 결합
RBAC는 Unity Catalog의 ABAC와 결합된다. 컨텍스트 속성(current_role())을 컬럼 마스크·행 필터 정책에 사용할 수 있다.
-- 역할에 따라 환자 이름 마스킹
CREATE OR REPLACE COLUMN MASK mask_patient_name
USING COLUMNS (name)
AS CASE
WHEN current_role() = 'clinical_trial_a_engineer' THEN name
ELSE '***'
END;
ALTER TABLE patients ALTER COLUMN name SET MASK mask_patient_name;이 패턴은 같은 테이블에서 역할마다 다른 데이터 뷰를 제공하면서 테이블 복제 없이 데이터 격리를 구현한다.
감사 로그: run_by와 run_as
RBAC의 핵심 운영 이점 중 하나는 감사 가시성이다. 역할을 가정한 상태에서 실행된 모든 작업은 Unity Catalog 감사 로그에 두 신원 모두 기록된다.
| 필드 | 의미 |
|---|---|
identity_metadata.run_by | 실제 작업을 수행한 사람 (사용자 이메일) |
identity_metadata.run_as | 작업이 수행된 역할 |
컴플라이언스 감사 시 "이 데이터에 실제로 접근한 사람이 누구인가"와 "어떤 권한 범위에서 접근했는가"를 모두 추적할 수 있다.
모든 권한 동시 활성
접근 가능
접근 가능
접근 가능
역할 가정 중
catalog_a 권한만 활성
✓ 접근 가능
✗ 차단됨
✗ 차단됨
관리형 Iceberg 테이블 공유 GA
기존 한계
Delta Sharing의 기존 방식에서는 Unity Catalog 관리형 테이블(델타 형식)을 외부 수신자와 공유할 수 있었지만, 관리형 Iceberg 테이블은 외부 Iceberg 클라이언트에 직접 노출하는 것이 제한적이었다.
이제 가능해진 것
GA 이후 Databricks 공급자는 관리형 Iceberg 테이블을 다음 대상에게 공유할 수 있다.
- Databricks-to-Databricks: 다른 Databricks 워크스페이스의 수신자
- 외부 Iceberg 클라이언트: Spark, Trino, Flink, DuckDB 등 Iceberg REST Catalog API를 지원하는 모든 엔진
공유된 테이블은 수신자의 외부 엔진에서 읽기 전용으로 Iceberg REST API를 통해 접근된다. Databricks 측에서 테이블이 관리되므로 스냅샷 관리·compaction·파일 정리는 제공자가 담당한다.
# 수신자 등록 (제공자 측)
CREATE RECIPIENT my_external_partner
USING ID 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx';
# 관리형 Iceberg 테이블을 공유
CREATE SHARE iceberg_share;
ALTER SHARE iceberg_share ADD TABLE catalog.schema.events;
GRANT SELECT ON SHARE iceberg_share TO RECIPIENT my_external_partner;외부 Spark 클러스터에서 수신자 관점:
# Iceberg REST Catalog로 공유 테이블 접근
spark.conf.set("spark.sql.catalog.shared", "org.apache.iceberg.spark.SparkCatalog")
spark.conf.set("spark.sql.catalog.shared.type", "rest")
spark.conf.set("spark.sql.catalog.shared.uri", "https://..." )
spark.conf.set("spark.sql.catalog.shared.token", recipient_token)
df = spark.table("shared.schema.events")운영 주의점
- 공유 테이블은 수신자 측에서 읽기 전용이다. 수신자가 쓸 수 없다.
- Iceberg V2 삭제 벡터나 Variant 타입을 사용하는 테이블의 경우 수신자 엔진의 Iceberg 버전 호환성을 미리 확인해야 한다.
- 스냅샷 보존 정책은 제공자가 관리한다. 수신자가 오래된 스냅샷에 의존하는 time travel 쿼리를 쓸 경우 보존 기간을 충분히 설정해야 한다.
Unity Catalog DML 최소권한: INSERT·UPDATE·DELETE Beta
기존 MODIFY 권한의 문제
Unity Catalog에서 테이블 쓰기 권한을 부여하려면 MODIFY 권한을 사용해야 했다. 그러나 MODIFY는 INSERT, UPDATE, DELETE, TRUNCATE를 모두 포함하는 묶음 권한이다. 특정 파이프라인에 INSERT만 허용하고 싶어도 MODIFY 전체를 줄 수밖에 없었다.
새 세분화 권한
Beta로 도입된 세 권한은 각각 독립적으로 부여할 수 있다.
| 권한 | 허용하는 작업 | 포함되지 않는 것 |
|---|---|---|
INSERT | 새 행 추가 | UPDATE, DELETE, TRUNCATE |
UPDATE | 기존 행 수정 | INSERT, DELETE, TRUNCATE |
DELETE | 행 삭제 | INSERT, UPDATE, TRUNCATE |
-- 수집 파이프라인 서비스 계정에 INSERT만 허용
GRANT INSERT ON TABLE catalog.schema.events TO `[email protected]`;
-- 보정 스크립트에 UPDATE만 허용 (INSERT/DELETE는 금지)
GRANT UPDATE ON TABLE catalog.schema.events TO `[email protected]`;
-- 기존 MODIFY 부여 방식은 계속 동작 (하위 호환)
GRANT MODIFY ON TABLE catalog.schema.events TO `[email protected]`;스키마 변경(ALTER TABLE)이나 TRUNCATE는 여전히 별도 권한(MODIFY 또는 ALL PRIVILEGES)이 필요하다.
Lakeflow Connect 업데이트 (2026년 8월)
| 커넥터 | 상태 | 주요 기능 |
|---|---|---|
| SharePoint | GA | Office 365 SharePoint 목록·라이브러리를 Lakeflow 파이프라인으로 수집 |
| PagerDuty | Beta | 인시던트·알림 데이터를 Delta 테이블로 수집해 운영 분석 활용 |
| Default Python packages | GA | 파이프라인 클러스터의 기본 Python 패키지 저장소를 워크스페이스 단위로 설정 |
SharePoint GA는 특히 데이터 엔지니어링 팀이 비즈니스 부서의 수동 Excel/SharePoint 데이터를 자동으로 레이크하우스에 적재할 수 있게 해 자주 발생하던 수동 CSV 임포트 작업을 제거한다.
운영 체크리스트
RBAC 도입 전 확인사항:
- [ ] 계정 관리자가 계정 레벨에서 RBAC 기능 활성화
- [ ] 각 워크스페이스에서 워크스페이스 관리자가 RBAC 활성화
- [ ]
ASSUME ROLE권한(Assumepermission)을 사용자·그룹·서비스 프린시펄에 부여 - [ ] 기존 컬럼 마스크·행 필터 정책이
current_role()을 사용하도록 업데이트 필요 여부 검토 - [ ] CI/CD 파이프라인이 서비스 프린시펄로 실행된다면 해당 서비스 프린시펄용 역할 생성
관리형 Iceberg 공유 도입 전 확인사항:
- [ ] 수신자 엔진의 Iceberg 지원 버전 확인 (REST Catalog API 필수)
- [ ] 공유 테이블의 Iceberg V2 기능(삭제 벡터, Variant 등) 사용 여부 확인
- [ ] 스냅샷 보존 기간 설정 (
DELTA.dataSkippingNumIndexedCols등) - [ ] 수신자 측 time travel 사용 패턴 파악 후 보존 기간 조정
DML 최소권한 마이그레이션:
- [ ] 현재 MODIFY를 받고 있는 서비스 계정별 실제 사용 DML 감사 (Unity Catalog 감사 로그)
- [ ] INSERT만 필요한 수집 파이프라인에 MODIFY → INSERT 교체 계획 수립
- [ ] Beta 기능이므로 GA 전 API 변경 가능성 모니터링
Open question
- RBAC에서 역할 가정 세션이 장시간 유지될 때의 토큰 갱신 동작은 무엇인가?
- INSERT/UPDATE/DELETE 최소권한이 Delta Lake의 Merge 연산에 어떻게 적용되는가(MERGE INTO는 세 DML을 동시에 수행)?
- 관리형 Iceberg 공유 테이블에서 Iceberg V3 기능(Variant 타입, deletion vectors) 공유 지원 시점은?
References
- https://docs.databricks.com/aws/en/release-notes/product/2026/august
- https://learn.microsoft.com/en-us/azure/databricks/release-notes/product/2026/august
- https://docs.databricks.com/aws/en/security/auth/rbac/
- https://learn.microsoft.com/en-us/azure/databricks/security/auth/rbac/
- https://docs.databricks.com/aws/en/security/auth/rbac/abac-interaction
- https://docs.databricks.com/aws/en/data-governance/unity-catalog/access-control/permissions-concepts