-- Migration: Erstelle admin_audit_logs Tabelle für Login-Sicherheit -- Datum: 2026-04-17 -- Zweck: Protokollierung aller Admin-Login-Versuche (erfolgreich und fehlgeschlagen) -- Tabelle erstellen CREATE TABLE IF NOT EXISTS admin_audit_logs ( id uuid PRIMARY KEY DEFAULT gen_random_uuid(), email text NOT NULL, ip_addr text NOT NULL, user_agent text NOT NULL, success boolean NOT NULL, reason text, -- z.B. "invalid_password", "user_not_found_or_inactive", "missing_credentials" timestamp timestamptz DEFAULT now() ); -- Indexes für Performance CREATE INDEX IF NOT EXISTS idx_audit_logs_email ON admin_audit_logs(email); CREATE INDEX IF NOT EXISTS idx_audit_logs_ip ON admin_audit_logs(ip_addr); CREATE INDEX IF NOT EXISTS idx_audit_logs_success ON admin_audit_logs(success); CREATE INDEX IF NOT EXISTS idx_audit_logs_timestamp ON admin_audit_logs(timestamp DESC); CREATE INDEX IF NOT EXISTS idx_audit_logs_email_timestamp ON admin_audit_logs(email, timestamp DESC); -- RLS (Row Level Security) - nur Admins können Logs anschauen ALTER TABLE admin_audit_logs ENABLE ROW LEVEL SECURITY; CREATE POLICY "Admin können ihre eigenen Logs sehen" ON admin_audit_logs FOR SELECT USING (true); -- TODO: Später auf Admin-Session prüfen -- Automatische Cleanup: Alte Logs nach 90 Tagen löschen (optional) -- Dies kann auch manuell als Cron-Job eingerichtet werden via supabase/functions