-- ============================================================================ -- AUDIT SCHEMA - Tabla: security_events -- ============================================================================ -- Eventos de seguridad específicos -- ============================================================================ CREATE TABLE IF NOT EXISTS audit.security_events ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), -- Categorización category audit.security_event_category NOT NULL, severity audit.event_severity NOT NULL, event_status audit.event_status NOT NULL DEFAULT 'success', -- Actor user_id UUID REFERENCES auth.users(id) ON DELETE SET NULL, ip_address INET NOT NULL, user_agent TEXT, geo_location JSONB, -- Detalles del evento event_code VARCHAR(50) NOT NULL, event_name VARCHAR(255) NOT NULL, description TEXT, -- Contexto técnico request_path VARCHAR(500), request_method VARCHAR(10), response_code INTEGER, -- Datos adicionales risk_score DECIMAL(3, 2), is_blocked BOOLEAN DEFAULT FALSE, block_reason TEXT, requires_review BOOLEAN DEFAULT FALSE, reviewed_by UUID REFERENCES auth.users(id), reviewed_at TIMESTAMPTZ, review_notes TEXT, -- Metadata raw_data JSONB DEFAULT '{}', -- Timestamps created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); -- Índices CREATE INDEX idx_security_events_user ON audit.security_events(user_id); CREATE INDEX idx_security_events_category ON audit.security_events(category); CREATE INDEX idx_security_events_severity ON audit.security_events(severity); CREATE INDEX idx_security_events_ip ON audit.security_events(ip_address); CREATE INDEX idx_security_events_created ON audit.security_events(created_at DESC); CREATE INDEX idx_security_events_blocked ON audit.security_events(is_blocked) WHERE is_blocked = TRUE; CREATE INDEX idx_security_events_review ON audit.security_events(requires_review) WHERE requires_review = TRUE; COMMENT ON TABLE audit.security_events IS 'Eventos de seguridad para monitoreo y respuesta a incidentes'; COMMENT ON COLUMN audit.security_events.risk_score IS 'Puntuación de riesgo calculada (0.00-1.00)';