43 lines
2.8 KiB
Markdown
43 lines
2.8 KiB
Markdown
# 🗄️ 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)만 가능하며 데이터 수정이나 식별 불가능한 데이터 조작은 원천 차단됩니다.
|
|
|
|
```sql
|
|
-- 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. 🚨 데이터베이스 운영 환경 권장 사항
|
|
|
|
1. **API 키 관리 주의점**:
|
|
- 프론트엔드 모바일 앱/대시보드 소스코드에 삽입되는 Supabase Key는 반드시 `anon` (읽기 전용 퍼블릭) 키여야 합니다.
|
|
- 크롤러(`.env`)와 백엔드 API 서버(`.env`)는 `service_role` (마스터) 키를 사용 중입니다. 이 키가 외부 저장소나 클라이언트에 노출되지 않도록 각별히 유의해야 합니다.
|
|
2. **IP 화이트리스트 검토**:
|
|
- 오라클 클라우드(API 서버) 및 NAS 크롤러 서버에서만 Supabase DB에 직접 Write 할 수 있도록 DB Network Restrictions 설정에서 IP 기반 제한을 걸어두는 것을 강력히 권장합니다.
|