Unity Catalog의 권한 모델
Unity Catalog는 ANSI SQL 표준 의 GRANT/REVOKE 문을 사용하여 데이터 접근 권한을 관리합니다. 모든 보안 가능한 객체(Securable Object)에 대해 세밀한 권한 제어가 가능합니다.보안 가능한 객체 계층
| 계층 | 오브젝트 | 상위 계층 |
|---|---|---|
| Metastore | 최상위 컨테이너 | - |
| Catalog | 카탈로그 | Metastore |
| Schema | 스키마 | Catalog |
| Table | 테이블 | Schema |
| View | 뷰 | Schema |
| Volume | 볼륨 | Schema |
| Function | 함수 | Schema |
| Model | 모델 | Schema |
| Connection | 연결 | Catalog |
| External Location | 외부 위치 | Metastore |
| Storage Credential | 스토리지 자격 증명 | Metastore |
💡 권한 상속: 상위 객체에 부여된 권한은 하위 객체에 자동으로 상속 됩니다. 예를 들어, Catalog에 SELECT를 부여하면 해당 Catalog 아래의 모든 Schema, Table에 SELECT 권한이 적용됩니다.
권한 유형 (Privilege Types)
데이터 객체 권한
| 권한 | 대상 객체 | 설명 |
|---|---|---|
| SELECT | Table, View, MV, Streaming Table | 데이터를 읽을 수 있습니다 |
| MODIFY | Table, MV, Streaming Table | 데이터를 INSERT, UPDATE, DELETE할 수 있습니다 |
| CREATE TABLE | Schema | 스키마 안에 테이블을 생성할 수 있습니다 |
| CREATE VIEW | Schema | 뷰를 생성할 수 있습니다 |
| CREATE MATERIALIZED VIEW | Schema | Materialized View를 생성할 수 있습니다 |
| CREATE VOLUME | Schema | Volume을 생성할 수 있습니다 |
| CREATE FUNCTION | Schema | 함수를 생성할 수 있습니다 |
| CREATE MODEL | Schema | ML 모델을 등록할 수 있습니다 |
| CREATE SCHEMA | Catalog | 카탈로그 안에 스키마를 생성할 수 있습니다 |
| CREATE CATALOG | Metastore | 카탈로그를 생성할 수 있습니다 |
| USE CATALOG | Catalog | 카탈로그에 접근할 수 있습니다 (하위 객체 접근의 전제 조건) |
| USE SCHEMA | Schema | 스키마에 접근할 수 있습니다 (하위 객체 접근의 전제 조건) |
| READ VOLUME | Volume | Volume의 파일을 읽을 수 있습니다 |
| WRITE VOLUME | Volume | Volume에 파일을 쓸 수 있습니다 |
| EXECUTE | Function | 함수를 실행할 수 있습니다 |
| APPLY TAG | Table, Schema, Catalog | 거버넌스 태그를 적용할 수 있습니다 |
| ALL PRIVILEGES | 모든 객체 | 해당 객체에 대한 모든 권한을 부여합니다 |
관리 권한
| 권한 | 설명 |
|---|---|
| OWNERSHIP | 객체의 소유자. 모든 권한을 가지며, 다른 사용자에게 권한을 부여할 수 있습니다 |
| MANAGE | External Location, Storage Credential의 관리 권한입니다 |
GRANT / REVOKE 문법
기본 문법
principal(권한 대상)
| 유형 | 문법 | 설명 |
|---|---|---|
| 사용자 | `user@company.com` | 개별 사용자 (백틱으로 감쌈) |
| 그룹 | `data_analysts` | 사용자 그룹 |
| 서비스 프린시팔 | `sp-etl-pipeline` | 서비스 계정 |
실전 예시
행 수준 보안 (Row-Level Security)
💡 행 필터(Row Filter) 를 사용하면, 사용자마다 보이는 행을 다르게 설정할 수 있습니다. 예를 들어, 서울 지역 담당자에게는 서울 데이터만 보이도록 할 수 있습니다.
설정 방법
동작 방식
열 수준 보안 (Column Masking)
💡 컬럼 마스킹(Column Mask) 을 사용하면, 민감한 컬럼의 값을 사용자 권한에 따라 마스킹(가림) 처리 할 수 있습니다. 원본 데이터를 변경하지 않고, 조회 시 동적으로 적용됩니다.
설정 방법
동작 방식
태그 기반 접근 제어 (ABAC)
🆕 ABAC(Attribute-Based Access Control) 는 거버넌스 태그를 기반으로 접근 정책을 정의하는 기능입니다 (Public Preview). 개별 테이블/컬럼마다 권한을 설정하는 대신, 태그가 붙은 모든 객체에 일괄 적용 할 수 있습니다.
태그 기반 정책 예시
권한 관리 모범 사례
| 원칙 | 설명 |
|---|---|
| 최소 권한 원칙 | 필요한 최소한의 권한만 부여합니다. ALL PRIVILEGES는 가급적 사용하지 않습니다 |
| 그룹 기반 관리 | 개별 사용자가 아닌 그룹 에 권한을 부여합니다. 사용자는 그룹에 추가/제거합니다 |
| 서비스 프린시팔 사용 | 프로덕션 파이프라인은 개인 계정이 아닌 서비스 프린시팔 로 실행합니다 |
| 환경별 카탈로그 분리 | dev, staging, production 카탈로그를 분리하여 권한을 다르게 설정합니다 |
| USE 권한 필수 | SELECT 만으로는 부족합니다. USE CATALOG + USE SCHEMA + SELECT 모두 필요합니다 |
| 정기 감사 | SHOW GRANTS와 시스템 테이블(system.access.audit)로 정기적으로 권한을 점검합니다 |