> ## Documentation Index
> Fetch the complete documentation index at: https://docs.sifi.life/llms.txt
> Use this file to discover all available pages before exploring further.

# 권한 모델 — RBAC & ABAC

## 권한 모델 — RBAC & ABAC

데이터를 만들었으니, 이제 **누가 어떤 데이터를 볼 수 있는가**를 정할 차례입니다. 접근 제어를 안 하면 아무나 민감 데이터를 보거나, 반대로 꼭 필요한 사람이 못 보게 됩니다. Unity Catalog는 이를 **두 가지 방식**으로 관리합니다 — 보통 **RBAC로 시작**하고, 민감 데이터가 많아지면 **ABAC로 보완**합니다.

### RBAC — 권한(Privilege) 기반 접근 제어

Unity Catalog는 **계층적 권한(privilege) 모델**로 접근을 통제합니다. `GRANT`/`REVOKE`로 **principal**(사용자·서비스 프린시펄·그룹)에게 **securable**(카탈로그 > 스키마 > 테이블·뷰·볼륨 등)에 대한 **privilege**를 부여하며, Databricks는 확장성을 위해 **그룹 단위 부여를 권장**합니다.

* **접근(Usage) 권한** — `USE CATALOG`, `USE SCHEMA`: 상위 컨테이너 내용에 접근하기 위한 전제 권한
* **데이터 권한** — `SELECT`(조회), `MODIFY`(insert·update·delete). 세분화 권한으로 `INSERT`/`UPDATE`/`DELETE`
* **생성·관리** — `CREATE SCHEMA`·`CREATE TABLE` 등 생성, `MANAGE`(권한·소유권 관리), `BROWSE`(객체 탐색), `APPLY TAG`(태그 부여)
* **상속** — 상위 객체에 부여한 권한은 하위의 현재·미래 객체에 자동 적용됩니다. 예: 카탈로그에 `SELECT`를 부여하면 그 안의 모든 스키마·테이블에 적용됩니다. 따라서 테이블을 조회하려면 상위 카탈로그·스키마의 `USE CATALOG`/`USE SCHEMA`도 필요합니다.

### ABAC — 속성(Attribute) 기반 접근 제어

**ABAC**는 securable에 연결된 **속성**(governed tag)을 평가해 접근을 결정하는 모델입니다. **정책**(policy)을 카탈로그·스키마·테이블 계층에 붙여두면, 해당 속성을 가진 객체에 정책이 **자동으로 적용**됩니다 — 객체마다 수동 설정하지 않아도 카탈로그·스키마 전체에 일관된 규칙이 걸립니다.

* **정책 유형** — **컬럼 마스크(column mask)**: 민감 컬럼 값을 마스킹, **행 필터(row filter)**: 행 단위 노출을 제어 (테이블·구체화 뷰·스트리밍 테이블에 적용). *동적 GRANT 정책은 Beta.*
* **예** — `pii` governed tag가 붙은 컬럼에 마스킹 정책을 한 번 정의하면, 이후 같은 태그가 붙는 새 컬럼에도 자동 적용됩니다.
* 표준 `GRANT` 권한 모델을 **대체가 아니라 보완**합니다 (대규모·일괄 적용에 강점).

### 언제 무엇을 쓰나

| | RBAC (권한) | ABAC (속성) |
| - | - | - |
| 결정 기준 | principal(그룹)에 부여된 privilege | securable의 속성(governed tag) |
| 부여 방식 | `GRANT`/`REVOKE` (대상별, 상위→하위 상속) | 태그 + 정책 (일괄 자동 적용) |
| 대표 예 | 분석가 그룹에 `gold` 스키마 `SELECT` | `pii` 태그 컬럼 마스킹 / 행 필터 |
| 역할 | 접근 통제의 **기본** | 태그 기반 세밀·대규모 통제로 **보완** |

> 실무에서는 **RBAC로 접근을 통제**하고, 민감 데이터에는 **ABAC 정책을 태그 기준으로 일괄 적용**해 보완합니다.

> ⚠️ **워크샵 안전 규칙**
>
> * 권한 실습은 **본인이 만든 오브젝트(`ccm_factory`)에 대해서만** 합니다.
> * 다른 참가자·공용 오브젝트의 권한은 변경하지 않습니다.
> * 부여 프롬프트는 실제 실행 전 반드시 **계획(Plan)을 읽고** 승인하세요.

### Step 1: 현재 권한 확인

먼저 내 카탈로그에 지금 어떤 GRANT가 걸려 있는지 봅니다.

```
ccm_factory_<본인ID>의 현재 GRANT를 보여줘. 카탈로그 레벨과 gold 스키마 레벨을 나눠서 표로 정리해줘.
```

### Step 2: 부여 방법 파악 (RBAC)

바로 실행하지 말고, 먼저 방법과 영향 범위를 물어봅니다.

```
특정 그룹에 ccm_factory_<본인ID>.gold 스키마 SELECT 권한을 부여하려고 해.
필요한 GRANT 구문과, 상위 카탈로그/스키마에 USE 권한이 함께 필요한지 알려줘. 아직 실행하지는 마.
```

### Step 3: 태그·정책 개념 확인 (ABAC)

```
ccm_factory_<본인ID>에서 PII로 볼 만한 컬럼에 태그를 붙이고, 그 태그 기준으로 마스킹 정책을 거는 ABAC 방식이 어떻게 동작하는지 우리 스키마 예시로 설명해줘.
```

> 💡 RBAC는 "누구에게 무엇을" 직접 주는 방식이라 직관적이고, ABAC는 "속성이 맞으면 자동 적용"이라 오브젝트가 많아질수록 관리가 쉽습니다. 둘은 함께 씁니다.
> 공식 문서: [Unity Catalog 권한](https://docs.databricks.com/en/data-governance/unity-catalog/manage-privileges/index.html) · [ABAC](https://docs.databricks.com/en/data-governance/unity-catalog/abac/index.html)

***

## 환경 요약

| 항목 | 값 |
| - | - |
| 카탈로그 | `ccm_factory_<본인ID>` (본인 전용) |
| 스키마 | `bronze` / `silver` / `gold` / `quarantine` |
| 볼륨 | `ccm_factory.bronze.raw_files` |
| 컴퓨트 | Serverless |
| Genie Code | 노력(Effort) 자동 + Custom Instructions |

***

## 다음 단계

* **[01. 분석용 가상 데이터 생성](01-data-generation)** — 카메라 모듈 공장 Bronze 17테이블, 약 290만 건을 Genie Code 프롬프트로 생성

***


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.