본문으로 건너뛰기

권한별 접근 비교

Admin, Analyst, Viewer 세 역할이 동일한 페이지에 접속했을 때 데이터와 기능이 어떻게 달라지는지 비교합니다.

Admin 카탈로그 전체 뷰

사전 준비

  • 샘플 데이터가 적재되어 있어야 합니다
  • Keycloak에 admin, analyst, viewer 계정이 설정되어 있어야 합니다
  • DataGrant 및 AccessPolicy가 부여되어 있어야 합니다

역할 개요

항목AdminAnalystViewer
카탈로그 가시성전체 (바이패스)DataGrant 기반DataGrant 기반
SQL 실행전체Row Filter + Column Mask 적용불가
⚙ 관리 콘솔전체 (PII, 정책, 비용, 감사 등 5그룹)없음없음
데이터 수정가능제한적불가
AI 보안 등급TOP_SECRET (gend-llm-internal)CONFIDENTIAL (gend-llm-confidential)PUBLIC (gend-llm-external)

1. 카탈로그 페이지 비교

Admin이 보는 카탈로그

Admin은 모든 카탈로그가 표시됩니다 (deny-by-default 바이패스):

├── iceberg
│ └── card (transactions, merchants, products, fraud_labels)
├── nessie
│ └── streaming (orders)
├── sourcedb
│ └── public (customers, accounts, credit_assessments)
├── card_crm
│ └── public (consultations, customer_segments, marketing_consents)
├── card_log
│ └── public (app_events)
├── system (Trino 내부)
├── tpch (벤치마크)
└── tpcds (벤치마크)

Analyst가 보는 카탈로그

Analyst는 DataGrant가 부여된 카탈로그만 표시됩니다:

├── iceberg
│ └── card (transactions, merchants, products)
└── sourcedb
└── public (customers, accounts)
노트

fraud_labels는 admin 전용 접근이므로 analyst에게는 표시되지 않습니다.

Viewer가 보는 카탈로그

Viewer는 가장 제한적인 접근 권한을 가집니다:

└── iceberg
└── card (transactions)

2. SQL 에디터 비교

동일한 쿼리, 다른 결과

세 역할 모두 다음 쿼리를 실행합니다:

SELECT customer_id, name, phone, amount, channel
FROM sourcedb.public.customers c
JOIN iceberg.card.transactions t ON c.customer_id = t.customer_id
LIMIT 5;

SQL 에디터 쿼리

Admin 결과 (원본 데이터)

customer_idnamephoneamountchannel
C001김철수010-1234-5678150,000online
C002이영희010-9876-543285,000offline

Analyst 결과 (Column Mask 적용)

customer_idnamephoneamountchannel
C001a3f2b1...010-****-5678150,000online
C002b7e4c3...010-****-543285,000offline
  • name: 해시 마스킹 → 원본 식별 불가
  • phone: 부분 마스킹 → 중간 4자리 숨김

Viewer 결과

Error: 쿼리 실행 권한이 없습니다. Viewer 역할은 읽기 전용입니다.

Viewer는 SQL 에디터에서 쿼리를 실행할 수 없습니다. 대신 저장된 쿼리 결과나 대시보드를 통해 사전 집계된 데이터만 조회할 수 있습니다.


3. Row Filter 적용 비교

Admin — 전체 데이터

SELECT channel, COUNT(*) AS cnt
FROM iceberg.card.transactions
GROUP BY channel;
channelcnt
online350,000
offline400,000
mobile250,000

Analyst — Row Filter 적용

Analyst에게는 channel IN ('online', 'mobile') Row Filter가 적용됩니다:

-- 원본 SQL
SELECT channel, COUNT(*) FROM iceberg.card.transactions GROUP BY channel;

-- Row Filter 적용 후 (내부 변환)
SELECT channel, COUNT(*) FROM (
SELECT * FROM iceberg.card.transactions
) __policy_filtered
WHERE (channel IN ('online', 'mobile'))
GROUP BY channel;
channelcnt
online350,000
mobile250,000
경고

offline 채널 거래는 Row Filter에 의해 자동으로 제외됩니다. Analyst는 자신의 쿼리 결과가 필터링되었음을 인식하지 못할 수 있습니다.


4. 사이드바 메뉴 비교

Admin 사이드바

Admin 사이드바

GenD 사이드바는 워크스페이스 평면(모든 사용자 공통)과 관리 콘솔 평면(admin 전용, 사이드바 하단 ⚙ 드릴인) 두 층입니다:

공통 핀
홈 · 카탈로그 · SQL 편집기 · AI 어시스턴트(드로어)
· JDBC 연결 가이드 · MCP 도구 마켓플레이스
데이터 엔지니어링
├── 데이터 가져오기
├── 학습 데이터셋
├── DB 연결
├── 파일·문서 수집
├── 파이프라인 모니터링
├── 파이프라인 스튜디오
└── 데이터 마트
ML 허브
└── 개요 · 데이터 & 피처 · 개발 · 모델 · 배포 & 서빙 · 모니터링
인텔리전스
└── 시세 (참조 데이터·기업·공시·뉴스·토픽·AI 인사이트는 준비 중)
지식 & 시맨틱
├── 온톨로지
├── 용어 사전
└── 스키마 그래프
데이터 관측
├── 데이터 리니지
├── 스키마 변경
├── 스키마 동기화
├── 벡터 인덱스
└── 타임 트래블
거버넌스
├── 데이터 품질
└── 데이터 액세스 (요청 / 검토 / 부여된 권한 탭)
───────────────
⚙ 관리 콘솔 (admin 전용 — 사이드바 하단 드릴인)
├── 접근 제어 & 보안 — 접근 정책 · 보안 등급 · 모델 접근
│ · PII 관리 · 데이터 보존 · 컴플라이언스
├── 운영 & 모니터링 — 비용 대시보드 · 감사 로그 · 드리프트 모니터링
├── 데이터플레인 설정 — CDC 커넥터 · 공용 수집기 (관리형)
├── AI & MCP 플랫폼 — AI 모델 제공자 · 바인딩 · 사용량
│ · ML 플러그인 · MCP 게이트웨이 · MCP 도구
└── 테넌트 & 사용자 — 사용자 관리 · 서비스 클라이언트
· 워크스페이스 관리 · 워크스페이스 격리

Analyst 사이드바

사이드바 하단의 ⚙ 관리 콘솔 진입이 표시되지 않습니다. 워크스페이스 평면 기능은 동일하게 접근 가능하며, 데이터 액세스는 요청 탭만 사용할 수 있습니다(검토/부여된 권한 탭은 admin 전용).

Viewer 사이드바

SQL 편집기, 커넥터, 파이프라인, 데이터 마트 등 쓰기 기능이 제한됩니다.


5. DataGrant 관리 (Admin 전용)

DataGrant 페이지

Admin만 접근 가능한 사이드바 → 거버넌스 → 데이터 액세스부여된 권한 탭(/governance/access?tab=grants)에서 각 역할/그룹에 대한 DataGrant를 관리합니다.

권한 부여 다이얼로그

권한 부여 다이얼로그

+ 권한 부여 버튼을 클릭하여 새로운 DataGrant를 생성합니다:

필드설명
대상 유형ROLE, GROUP, USER
대상 이름역할명, 그룹 경로(/marketing), 사용자명
객체 유형CATALOG, SCHEMA, TABLE
권한USE, SELECT, INSERT, ALL
카탈로그대상 카탈로그명

6. AccessPolicy 관리 (Admin 전용)

접근 정책 페이지

Admin만 접근 가능한 사이드바 하단 ⚙ 관리 콘솔 → 접근 제어 & 보안 → 접근 정책 페이지에서 Row Filter와 Column Mask를 설정합니다.

현재 적용 중인 정책 예시

정책명유형대상효과
analyst_mask_ssnColumn Maskanalyst → customers.resident_number'***-**-****'
analyst_mask_phoneColumn Maskanalyst → customers.phone010-****-XXXX
mkt_region_filterRow Filteranalyst → transactions온라인/모바일만
viewer_mask_amountColumn Maskviewer → transactions.amount10만원 이상 절삭

7. AI 보안 등급 비교

AI 채팅에서 같은 질문을 해도, 역할에 따라 AI가 접근할 수 있는 데이터 범위가 다릅니다:

등급역할AI가 참조 가능한 데이터
TOP_SECRETadmin (gend-llm-internal)모든 테이블, PII 원본 포함
CONFIDENTIALanalyst (gend-llm-confidential)고객 거래 데이터, PII 마스킹
PUBLICviewer (gend-llm-external)집계 데이터, 공개 메트릭만

대화 예시: "고객 연락처 보여줘"

  • Admin: 원본 전화번호와 이메일이 표시됨
  • Analyst: 010-****-5678 형태로 마스킹된 결과
  • Viewer: "해당 데이터에 대한 접근 권한이 없습니다" 응답

요약 비교표

기능AdminAnalystViewer
카탈로그전체 8개Grant된 2~3개Grant된 1~2개
SQL 실행원본 데이터Row Filter + Column Mask불가
AI 질의TOP_SECRETCONFIDENTIALPUBLIC
⚙ 관리 콘솔5그룹 전체없음없음
데이터 수정CRUD 전체INSERT 가능읽기만
정책 관리생성/삭제조회만없음