2.8 KiB
2.8 KiB
🗄️ SolarPower Database History & Security Requirements
이 문서는 과거의 파편화된 데이터베이스 업데이트 내역과 보안(RLS) 점검 보고서를 하나로 통합한 가이드입니다. Supabase 관리 시 이 문서를 기준으로 보안 정책과 과거 변경 이력을 참고하세요.
1. 📋 테이블 구조 핵심 변경 이력
| 일자 | 내용 | 비고 |
|---|---|---|
| 2026-01-23 | daily_stats (일별 통계 요약 테이블) 신설 및 인덱스 추가 |
plant_id, date 복합 인덱스 및 Unique 제약조건 적용 |
| 2026-01-23 | plants 테이블 initial_cumulative_kwh 컬럼 추가 |
시스템 도입 이전의 누적 발전량(자산) 추적 목적 |
| 2026-01-30 | RLS 보안 정책 대규모 적용 | plants, solar_logs, daily_stats, monthly_stats 테이블 전체 |
| 2026-04-14 | plants 테이블 alerts_enabled 컬럼 추가 (진행) |
대시보드에서 앱 알림을 토글링할 수 있도록 불리언 제어 컬럼 추가 |
2. 🛡️ 보안 통제 정책 (Row Level Security)
데이터베이스의 주요 4개 테이블(plants, solar_logs, daily_stats, monthly_stats)에는 치명적인 무단 조작을 방지하기 위해 엄격한 RLS(Row Level Security) 가 적용되어 있습니다.
사용자 등급별 권한
- API 서버 및 크롤러 (service_role): 모든 데이터에 대한 자유로운 읽기/쓰기(INSERT, UPDATE) 권한 보유(
.env파일 내SUPABASE_KEY가service_role토큰이어야 함). - 일반 익명 사용자 (anon 권한 - App/Dashboard): 조회(SELECT)만 가능하며 데이터 수정이나 식별 불가능한 데이터 조작은 원천 차단됩니다.
-- RLS 활성화 예시
ALTER TABLE plants ENABLE ROW LEVEL SECURITY;
-- 익명 사용자는 조회만 가능
CREATE POLICY "Allow anonymous read access" ON plants FOR SELECT TO anon USING (true);
-- 서비스 로직은 모든 권한 허용
CREATE POLICY "Allow service_role full access" ON plants FOR ALL TO service_role USING (true) WITH CHECK (true);
3. 🚨 데이터베이스 운영 환경 권장 사항
- API 키 관리 주의점:
- 프론트엔드 모바일 앱/대시보드 소스코드에 삽입되는 Supabase Key는 반드시
anon(읽기 전용 퍼블릭) 키여야 합니다. - 크롤러(
.env)와 백엔드 API 서버(.env)는service_role(마스터) 키를 사용 중입니다. 이 키가 외부 저장소나 클라이언트에 노출되지 않도록 각별히 유의해야 합니다.
- 프론트엔드 모바일 앱/대시보드 소스코드에 삽입되는 Supabase Key는 반드시
- IP 화이트리스트 검토:
- 오라클 클라우드(API 서버) 및 NAS 크롤러 서버에서만 Supabase DB에 직접 Write 할 수 있도록 DB Network Restrictions 설정에서 IP 기반 제한을 걸어두는 것을 강력히 권장합니다.