현업 사례: 권한을 개인에게 직접 줬다가 퇴사자 정리에 3일 걸린 경험
🔥 거의 모든 조직에서 한 번쯤 겪는 문제입니다.프로젝트 초기에는 팀원이 5명이라 “그냥 개인한테 직접 GRANT 해주면 편하지”라고 생각합니다. 하지만 6개월이 지나면 상황이 완전히 달라집니다.
실제 사고 시나리오
이것을 안 하면 벌어지는 일
| 안티패턴 | 결과 | 영향 |
|---|---|---|
| 개인에게 직접 GRANT | 퇴사자 정리가 N x 권한 수 작업 | 운영 부담 폭증 |
| ALL PRIVILEGES 남발 | 신입사원이 프로덕션 테이블을 DROP | 데이터 유실 사고 |
| 권한 문서화 안 함 | 감사 시 누가 무엇에 접근하는지 파악 불가 | 규정 위반 |
| dev/prod 카탈로그 미분리 | 개발 중 실수로 프로덕션 데이터 변경 | 서비스 장애 |
그룹 기반 권한 설계 패턴 (역할별 3~5개 그룹)
현업에서 가장 효과적인 권한 관리 방법은 역할(Role) 기반의 그룹 을 설계하는 것입니다. 개인에게는 절대 직접 GRANT하지 않고, 그룹 멤버십만 관리합니다.권장 그룹 설계 (5개 기본 그룹)
사용자 관리는 그룹 멤버십만으로
💡 현업 팁: 그룹은 IdP(Azure AD, Okta 등)에서 관리하고 SCIM으로 동기화 하는 것이 가장 좋습니다. 사람이 퇴사하면 HR 시스템 → IdP → Databricks로 자동 연쇄 삭제됩니다. 수동으로 Databricks 그룹을 관리하면 반드시 빠뜨리는 사람이 생깁니다.
최소 권한 원칙의 실전 적용
“최소 권한 원칙(Principle of Least Privilege)“은 보안 교과서에 항상 나오지만, 현업에서 적용하려면 구체적인 패턴이 필요합니다.흔한 실수: ALL PRIVILEGES의 유혹
환경별 권한 차등 적용
서비스 프린시팔 활용
💡 이것은 프로덕션 환경에서 가장 중요한 패턴입니다.
정기 감사 쿼리
💡 현업 팁: 분기에 한 번 “이 사람이 정말 이 권한이 필요한가?”를 검토하는 권한 리뷰(Access Review) 를 하세요. 프로젝트가 끝났는데 권한이 남아있는 경우가 전체의 30% 이상입니다. 이것을 안 하면 시간이 지날수록 권한이 비대해지는(Privilege Creep) 현상이 발생합니다.
정리
| 기능 | 설명 |
|---|---|
| GRANT/REVOKE | SQL 표준 문법으로 권한을 부여/회수합니다 |
| 권한 상속 | 상위 객체의 권한이 하위 객체에 자동 적용됩니다 |
| Row Filter | 사용자별로 보이는 행을 제한합니다 |
| Column Mask | 민감한 컬럼의 값을 동적으로 마스킹합니다 |
| ABAC | 태그 기반으로 접근 정책을 일괄 적용합니다 (Preview) |
| USE 권한 | 카탈로그/스키마 접근의 전제 조건입니다 |