Disposable security audit matrix
Run from the repository root on a local Docker host:
python3 tests/integration/audit/run.py
Requires Python 3, Docker Compose, Internet access for images and roughly 12 GB available memory. The SQL Server image requires an x86-64 host. Oracle image support also depends on host architecture and page size. Application drivers are installed only inside the fixture image; sqlmap gains no dependencies.
The runner creates an isolated sqlmap-audit-<pid> Compose project. Database ports
are internal; deliberately injectable HTTP endpoints bind to random localhost
ports. Credentials are synthetic and fixed for these disposable databases. The
runner does not access the remote sqlmap testbed or existing database services.
It removes its own containers, networks and volumes on completion, including a
failed assertion. --keep retains them for investigation; remove the retained
project with docker compose -p <project> -f tests/integration/audit/compose.yml down --volumes.
The matrix covers MySQL 8, MariaDB 10.11, PostgreSQL 16, SQL Server 2022 and
Oracle Free 23, with administrator, application and restricted accounts. Two
additional MySQL instances exercise unrestricted and disabled file operations.
It compares native metadata results with real UNION SQLi for every account and
boolean blind SQLi for each engine's application account, using five threads.
Variable listings retain total counts and show at most 20 details. Additional
scenarios cover oversized listings, escaped control characters, confirmed empty
queries, RLS enforcement and command advice with and without stacked execution.
It also checks that audits leave configuration unchanged, that revoking grants
and changing settings changes the result, and that database root with FILE
privilege still cannot read a root-only fixture file. Filesystem probes and
configuration changes belong to the fixture provisioner; --audit performs
metadata reads only.
Use --native-only for database queries and permission/configuration/filesystem
checks without the HTTP scans. Logs and native reference results go to a printed
temporary directory. For a previously seeded retained project:
python3 tests/integration/audit/run.py --project sqlmap-audit-<id> --reuse --keep