What it protects
The same rules and policies for every service that uses a database, without a library per language:
- VERICTO-001, 042, 010 and 011: DELETE and UPDATE without WHERE, DROP TABLE and TRUNCATE, from whichever service.
- VERICTO-015 to 019: risky DDL at runtime, such as
ALTER TABLE … DROP COLUMNor disabling triggers and RLS. - VERICTO-087 (Team and Enterprise): an allowlist of tables and columns per identity. At the proxy, the identity is the session's database user: give each service its own user and its own allowlist.
- VERICTO-085 (Team and Enterprise): sensitive columns blocked or masked in the result, for every service at once.
Latency and availability
With a sidecar, the hop between the service and the proxy is localhost inside the pod. With a shared proxy, it is one more hop inside the cluster. Either way, parsing and evaluation happen in the proxy process, with no network calls on the critical path.
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.
Recommended sizes: from 0.25 vCPU and 64 MB (up to 1,000 queries per second) to 1 vCPU and 256 MB (50,000 or more). Memory grows with connections, about 4 KB per TCP session: a sidecar per pod multiplies small instances; a shared proxy concentrates a database's traffic in a few replicas.
How to implement it
- Register each database and create an API key with
rules:readandtelemetry:write. Store it as a Kubernetes Secret. - Shared proxy: a Deployment with two replicas and a Service per database (the manifest is in the guide). The services point their connection string at
vericto-proxy:5433. - Sidecar: add the
ghcr.io/vericto/vericto-proxycontainer to the pod and connect the service tolocalhost:5433. Inside the pod, TLS between the application and the proxy can stay disabled. - If the database is managed (RDS, Cloud SQL), encrypt the proxy → database hop with
UPSTREAM_SSLMODE=requireorverify-full: TLS. - If the audit trail must not lose events, use
VERICTO_TELEMETRY_BUFFER=diskwith a persistent volume: telemetry buffering. - Give each service its own database user, to see and limit its traffic separately. On ECS (Fargate), the guide has the task definition.
When not to use this option
- Services on Oracle or SQL Server. Use the Runtime API, with its safety limit of 100 requests per second per API key (it can be raised if you need it).
- A service mesh with end-to-end TLS to the database. The proxy needs to see the SQL: client TLS must terminate at the proxy (
PROXY_TLS_MODE=require) and be opened again towards the database. - One application and one database. You need none of this: see web application.
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 |
| Per-agent allowlists (VERICTO-087) | — | — | Yes | Yes |
| Sensitive columns and masking (VERICTO-085) | — | — | Yes | Yes |
| Rule simulator | — | Up to 30 days | Up to 90 days | Per contract (up to 180 days) |
| VPC deployment | — | — | — | Yes |
Prices and every limit on Pricing.