What it protects
The standard rules apply to every statement that goes through the proxy. In a web application, the ones that most often fire:
- VERICTO-001 and VERICTO-042: DELETE and UPDATE without WHERE, the costliest mistake a script or an ORM can make.
- VERICTO-010, VERICTO-011 and VERICTO-012: DROP TABLE, TRUNCATE and DROP SCHEMA in production.
- VERICTO-090: tautologies such as
OR 1=1in a WHERE, the typical pattern of a SQL injection. - VERICTO-085 (Team and Enterprise): the columns you tag as sensitive are blocked or returned masked.
A blocked statement never reaches the database: the application gets its driver's native error, SQLSTATE 42501 on Postgres and ERROR 1142 on MySQL, with the rule that blocked it.
Latency and availability
The proxy adds one network hop, from the application to the proxy, plus the parsing and evaluation of each statement, which happen in its own process with no network calls on the critical path. Put it on the same network as the application (same host, subnet or VPC) so that hop stays short.
For parsing and rule evaluation, the design target is p99 < 2 ms. It is a target, not a measurement: the proxy latency benchmark is not published yet.
The proxy's availability depends on your deployment, because it runs in your infrastructure. Rules sync every 5 minutes by default (VERICTO_RULES_SYNC_INTERVAL_SECS, 30 s minimum) and telemetry never delays evaluation: it is sent asynchronously, after the decision.
How to implement it
- Create a workspace, register the database with its dialect (PostgreSQL or MySQL) and copy its Database ID: integration guide.
- Create an API key with the
rules:readandtelemetry:writescopes: that is all the proxy needs. - Deploy the container
ghcr.io/vericto/vericto-proxynext to your application (Docker, Kubernetes or ECS), withUPSTREAM_HOSTpointing at your database. - Point the host and port of the connection string at the proxy (5433 on Postgres, 3307 on MySQL). The credentials do not change: configuration reference.
- Start in observe mode: check in the dashboard what would have been blocked, then enforce the rules.
- Before changing a rule, simulate it against your real traffic (Builder, Team and Enterprise).
When not to use this option
- Oracle or SQL Server. There is no TCP proxy for those dialects: use the Runtime API before running each query.
- You cannot change the host the application connects to. The Runtime API evaluates over HTTP without touching the network; your code runs the query only if the answer is not BLOCKED.
- Opaque end-to-end TLS. SCRAM channel binding (SCRAM-SHA-256-PLUS) and end-client
certauthentication do not work through a proxy that inspects the SQL, by design. - Stopping SQL before the merge. That is the CLI in CI: see CI/CD and migrations. Most teams use both.
Plan availability
| Feature | Free | Builder | Team | Enterprise |
|---|---|---|---|---|
| TCP proxy, Runtime API, CLI and MCP | Yes | Yes | Yes | Yes |
| Queries per month (proxy and Runtime API) | 500K | 5M | 50M | Unlimited |
| Databases | 1 | 3 | 10 | Custom |
| Custom rules (YAML) | — | 5 | 20 | Unlimited |
| Rule simulator | — | Up to 30 days | Up to 90 days | Per contract (up to 180 days) |
| Sensitive columns and masking (VERICTO-085) | — | — | Yes | Yes |
| VPC deployment | — | — | — | Yes |
Prices and every limit on Pricing.