完整資料庫重置指南
概述
此指南協助你安全地重置 Supabase 資料庫,包含完整的 Super Admin 自動重建機制和所有必要的初始資料。
🔄 DB Reset 流程說明
當執行 supabase db reset 時會發生什麼:
- 清除所有資料: 刪除現有的所有表和資料
- 執行 Migrations: 按順序執行
migrations/資料夾中的所有 SQL 檔案 - 執行 Seed 資料: 自動執行
seed.sql檔案
執行順序
1. 清除資料庫
2. 執行所有 migration 檔案 (按檔名順序)
3. 執行 seed.sql (自動初始化)🔑 Super Admin 自動重建機制
✅ 已實現功能
在每次 DB reset 後,seed.sql 會自動:
- 執行系統初始化: 呼叫
initialize_super_admin_system() - 建立 Super Admin 角色: 確保
super_admin角色存在且受保護 - 建立認證帳戶: 在
auth.users中建立完整認證 - 建立用戶記錄: 在
users表中建立並連結 - 分配角色: 自動分配 Super Admin 角色
- 分配權限: 為所有角色分配適當權限
🔑 預設 Super Admin 登入資訊
每次 DB reset 後都會重建:
- Email:
admin@system.local - 密碼:
SuperAdmin
⚠️ 重要: 這是固定的預設密碼,任何人都能看到此文檔,所以:
- DB reset 後請立即登入並更改密碼
- 生產環境應修改或移除此機制
執行 DB Reset
完整重建
bash
# 在 supabase 目錄下執行
supabase db reset
# 您會看到 Super Admin 初始化訊息:
# ================================================
# ✅ Super Admin 系統已自動初始化
# ================================================
#
# 🔑 Super Admin 登入資訊:
# - Email: admin@system.local
# - 密碼: SuperAdmin僅執行 Migrations
bash
# 如果只想執行 migrations 而不執行 seed.sql
supabase db reset --linked📁 重要檔案說明
1. export_initial_data.sql
用途:匯出當前資料庫中的初始資料
執行時機:重置前執行,用於備份現有資料
使用方式:
- 打開 http://localhost:54323 (Supabase Studio)
- 進入 SQL Editor
- 複製並執行
export_initial_data.sql中的查詢 - 將結果複製保存到文字檔
2. seed.sql
用途:包含所有必要初始資料的種子檔案
內容包括:
- ✅ System settings (系統設定)
- ✅ System user (系統用戶:
00000000-0000-0000-0000-000000000000) - ✅ RFM segment mapping (RFM 分群對應)
- ✅ Super Admin 自動初始化
- ✅ 角色權限完整配置
- ✅ 商品分類資料
- ✅ 行銷活動資料
3. verify_seed_data.sql
用途:驗證資料庫重置後的資料完整性
執行時機:重置後執行,確認資料正確載入
安全注意事項
DB Reset 後必須執行
- 立即更改密碼: 使用預設密碼登入後立即更改
- 檢查系統狀態: 確認所有保護機制正常
- 啟用 2FA: 為 Super Admin 帳戶啟用雙因素認證
檢查系統健康
sql
-- 檢查 Super Admin 系統狀態
SELECT * FROM check_super_admin_system_health();
-- 查看所有系統角色
SELECT * FROM get_system_roles_status();
-- 緊急密碼重設
SELECT reset_super_admin_password('YourNewSecurePassword2025#');重置前準備工作
重要:重置前的資料備份
在重置前,建議先匯出當前的關鍵資料:
- 使用 Supabase Studio:打開 http://localhost:54323,在 SQL Editor 中執行
export_initial_data.sql查詢 - 檢查關鍵資料:
sql
-- 檢查系統設定
SELECT * FROM system_settings;
-- 檢查系統用戶
SELECT * FROM users WHERE id = '00000000-0000-0000-0000-000000000000';
-- 檢查角色
SELECT * FROM roles;
-- 檢查權限
SELECT * FROM permissions LIMIT 10;✅ 驗證檢查點
重置後請確認以下項目:
系統設定
- [ ]
fast_response_threshold_minutes = 15 - [ ]
medium_response_threshold_minutes = 30 - [ ]
slow_response_threshold_minutes = 60 - [ ]
agent_busy_threshold = 5
👤 系統用戶
- [ ] 系統用戶 ID:
00000000-0000-0000-0000-000000000000存在 - [ ] Email:
system@internal.system
🔑 Super Admin 系統
- [ ] Super Admin 角色存在且受保護
- [ ] Super Admin 認證帳戶可正常登入
- [ ] 擁有所有系統權限
- [ ] 稽核日誌正常記錄
角色與權限
- [ ] 角色表 (roles) 資料正確載入
- [ ] 權限表 (permissions) 資料正確載入
- [ ] 權限群組 (permission_groups) 資料正確載入
- [ ] 角色權限關聯 (role_permissions) 正確設定
RFM 分群
- [ ] 至少 50 個 RFM 模式
- [ ] 6 個分群類型:VIP, Loyal, Potential, New, At Risk, Lost
📞 故障排除
常見問題
1. Super Admin 登入失敗
sql
-- 檢查認證帳戶是否存在
SELECT id, email, email_confirmed_at
FROM auth.users
WHERE email = 'admin@system.local';
-- 如果不存在,強制重建
SELECT ensure_super_admin_user_with_auth(true);2. 權限不足
sql
-- 檢查角色分配
SELECT u.email, r.name as role_name
FROM users u
JOIN user_roles ur ON u.id = ur.user_id
JOIN roles r ON ur.role_id = r.id
WHERE u.email = 'admin@system.local';
-- 檢查權限分配
SELECT COUNT(*) as permission_count
FROM role_permissions rp
JOIN roles r ON rp.role_id = r.id
WHERE r.name = 'super_admin';3. 系統狀態異常
sql
-- 完整系統健康檢查
SELECT * FROM check_super_admin_system_health();
-- 如果有問題,重新初始化
SELECT initialize_super_admin_system();緊急恢復
sql
-- 完全重建 Super Admin 系統
SELECT ensure_super_admin_user_with_auth(true);
-- 重設為新密碼
SELECT reset_super_admin_password('EmergencyPassword2025!');
-- 檢查恢復結果
SELECT * FROM check_super_admin_system_health();不同環境的建議
開發環境
- ✅ 保持現有的自動初始化機制
- ✅ 使用預設密碼方便測試
- ✅ 每次 reset 後自動重建
測試環境
- ⚠️ 考慮使用隨機密碼
- ⚠️ 建立自動化測試腳本
- ⚠️ 定期檢查安全配置
生產環境
- ❌ 移除預設密碼機制
- ❌ 手動建立 Super Admin
- ❌ 使用環境變數管理密碼
- ❌ 啟用所有安全機制
生產環境修改建議
sql
-- 在生產環境的 seed.sql 中,修改為:
-- SELECT initialize_super_admin_system(); -- 註解掉自動初始化
-- 改為手動指令:
-- 1. 手動執行初始化
-- 2. 立即更改密碼
-- 3. 啟用 2FA
-- 4. 限制訪問權限✅ 檢查清單
DB Reset 後必做事項
- [ ] 確認 Super Admin 初始化訊息出現
- [ ] 使用預設密碼登入成功
- [ ] 立即更改為強密碼
- [ ] 檢查系統健康狀況
- [ ] 啟用雙因素認證 (建議)
- [ ] 檢查所有角色權限正確
- [ ] 驗證所有核心功能正常
定期維護
- [ ] 每月檢查系統健康狀況
- [ ] 定期更新 Super Admin 密碼
- [ ] 檢查稽核日誌異常
- [ ] 確認保護機制運作正常
安全提醒
- ⚠️ 重置會刪除所有現有資料
- ⚠️ 請確保在開發環境中進行測試
- ⚠️ 生產環境重置前務必完整備份
- ⚠️ 確認所有團隊成員了解重置影響
- ⚠️ 預設密碼必須在首次登入後立即更改
🎉 現在您可以安心進行 DB reset,Super Admin 帳戶會自動重建!
更新日期: 2025-07-14
文檔版本: 2.0