MBO-Tech-IT-Webseite/modules/02-admin-auth/migrations/MIGRATIONS_AUDIT_LOGS.sql

32 lines
1.4 KiB
SQL

-- 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