피드로 돌아가기
Dev.toBackend
원문 읽기
TenantDb Wrapper 도입으로 데이터 유출 가능성 0% 달성
Multi-Tenancy in Bun/Hono Without Boilerplate
AI 요약
Context
Multi-tenant SaaS 환경에서 WHERE 절 누락으로 인한 데이터 유출 리스크 상존. DB per Tenant 방식은 Connection 비용 증가와 Migration 오버헤드 및 통합 리포팅의 어려움이라는 확장성 한계를 가짐.
Technical Solution
- Raw DB Connection을 래핑한 TenantDb 객체를 Request 단위로 생성하여 컨텍스트에 주입하는 구조 설계
- SELECT 쿼리 실행 시 currentTenantId와 SYSTEM_TENANT_ID를 배열 형태로 자동 주입하여 데이터 격리와 공통 참조 데이터 접근을 동시에 해결
- INSERT 연산 시 Caller가 전달한 tenantId를 무시하고 런타임에 확정된 tenantId를 강제 덮어쓰기 하는 메커니즘 적용
- WHERE 절이 없는 UPDATE 및 DELETE 요청에 대해 시스템 레벨에서 예외를 발생시켜 대규모 데이터 변조 원천 차단
- Hono Middleware를 통한 Hostname 및 JWT 기반 tenantId 추출 및 TenantDb 인스턴스 동적 할당 프로세스 구축
- 관리자 전용 r.systemScope() 함수를 통한 명시적 Opt-in 방식의 전역 쿼리 권한 제어
실천 포인트
1. DB 접근 계층에 Wrapper를 도입하여 쿼리 파라미터를 자동 주입하는 구조 검토
2. 전역 설정 데이터 처리를 위한 전용 System Tenant ID 정의 및 Read 범위 포함 여부 확인
3. 조건절 없는 쓰기/수정 쿼리에 대한 시스템 레벨의 Safe-guard 구현
4. 요청 컨텍스트(Middleware)와 데이터 접근 객체 간의 생명주기 일치 여부 점검