Log SQL executions made via UI

This commit is contained in:
Peter Stockings
2026-01-30 19:17:25 +11:00
parent 4dcf589b63
commit 14d29724f1
2 changed files with 18 additions and 3 deletions

View File

@@ -2,11 +2,11 @@ import os
import requests # Import requests library
import json # Import json library
from flask import Blueprint, render_template, request, current_app, jsonify
from flask_login import login_required
from flask_login import login_required, current_user
from jinja2_fragments import render_block
from flask_htmx import HTMX
from extensions import db
from utils import prepare_svg_plot_data # Will be created for SVG data prep
from utils import prepare_svg_plot_data, get_client_ip # Will be created for SVG data prep
sql_explorer_bp = Blueprint('sql_explorer', __name__, url_prefix='/sql')
htmx = HTMX()
@@ -14,6 +14,19 @@ htmx = HTMX()
def record_sql_audit(query, success, error_message=None):
"""Records a SQL execution in the audit table."""
try:
person_id = getattr(current_user, 'id', None)
ip_address = get_client_ip()
sql = """
INSERT INTO sql_audit (person_id, query, ip_address, success, error_message)
VALUES (%s, %s, %s, %s, %s)
"""
db.execute(sql, [person_id, query, ip_address, success, error_message], commit=True)
except Exception as e:
current_app.logger.error(f"Failed to record SQL audit: {e}")
def _execute_sql(query):
"""Executes arbitrary SQL query, returning results, columns, and error."""
results, columns, error = None, [], None
@@ -21,9 +34,11 @@ def _execute_sql(query):
results = db.execute(query)
if results:
columns = list(results[0].keys()) if isinstance(results, list) and results else []
record_sql_audit(query, True)
except Exception as e:
error = str(e)
db.getDB().rollback()
record_sql_audit(query, False, error)
return (results, columns, error)
def _save_query(title, query):