Skip to content

Security

Your schema.Not your rows.

DOGM's AI sees your schema's table and column names, not your rows, and real data you need masked stays on your machine with dogm mask. This page describes the hosted service as it runs in the early-access beta, and labels what isn't there yet. The in-browser demo sends nothing anywhere.

Rows and keys stay on your machineA dashed boundary marks your machine. Inside it sit a laptop, a table of real rows and the masking key. Only a schema card, column names without values, travels out along the track to DOGM.your machinerows$ dogm mask
In your browser
The in-browser demo. Generation, masking, checks and CSV export run on your machine, with fictional data only.
In the beta
The hosted service: accounts, AI drafting and hosted runs are live in the early-access beta, with the encryption and tenant isolation described below.

What DOGM sees

Metadata by default.Rows only if you send them.

To draft a spec, DOGM needs the shape of your data, not what's in it. Here is where each kind of input goes.

What DOGM and the AI model receive, by type of data
The description, SQL DDL or Prisma schema you pasteSent to DOGM: Yes, stored with the spec version it drafted. Don't paste real rowsAI model: A description as written; a schema as parsed table and column metadata
Table names, column names, types and constraintsSent to DOGM: Yes, when you import a schemaAI model: Yes
Values in INSERT statements inside pasted DDLSent to DOGM: Yes, as part of the stored textAI model: Only when the project's AI sample values setting is on, and masked first
Rows from your databaseSent to DOGM: Never: DOGM doesn't connect to databasesAI model: Never
Masking keysSent to DOGM: Hosted runs use a project key DOGM generates and encrypts. dogm mask keys never leave your machineAI model: Never

AI data handling

AI drafts.The engine decides.

AI helps you write a spec once, and every run after that is deterministic and uses no AI. Drafting uses Anthropic's Claude models through the Anthropic API, and DOGM treats everything they return as untrusted.

  1. 01

    Draft

    Claude turns your request and schema metadata into a draft spec.

  2. 02

    Schema check

    The draft must match the spec's JSON Schema, or it's rejected.

  3. 03

    Compile

    The engine's own compiler checks it again and reports errors by path.

  4. 04

    Approve

    Nothing runs until a person on your team approves the spec.

What the AI never does

  • Generate data rows
  • Decide whether a check passes
  • Hold or see masking keys
  • Connect to your database
  • Column names and schema comments are treated as data, never as instructions. The spec language has no code execution and no SQL passthrough, so injected text cannot run anything.
  • Every AI call is logged with the fields it sent.
  • The Claude API has no EU-only processing option. AI runs only when someone in your workspace drafts a spec or asks for an explanation of a failed check, so if you need EU-only processing, write specs by hand and skip those two actions.

Protection

Keys, tenantsand local work.

Live in the beta

Encryption with Tink and Cloud KMS

Webhook signing secrets and project masking keys are encrypted with a Google Tink AES-256-GCM keyset. That keyset is itself encrypted by a key held in Google Cloud KMS, which never leaves the KMS. Database connection strings will be stored the same way once database connections arrive; they aren't in the product yet.

Workers decrypt a masking key in memory for the length of one run only.

Live in the beta

Tenant isolation with row-level security

Every tenant table carries an organization ID and is protected by Postgres row-level security. The app connects as a role that owns nothing and cannot bypass it, and the tenant is set per transaction.

Staff admin actions use a separate role and are written to an audit log.

CLI, from source

Masking on your machine

dogm mask runs the same engine locally, so real rows and their masking keys stay on your machine. No KMS and no DOGM server are involved.

dogm mask is in the CLI, which you build from source until its first release.

Masking is pseudonymization, not anonymization. Anyone with the key can rebuild the mapping for a list of candidate values, and under the Data Privacy Act of 2012 masked personal data is still personal data.

Responsible disclosure

Found a security issue?

Email us what you found and the steps to reproduce it. Give us time to fix it before you share it, and don't access other people's data or degrade the service while you test.

Security inbox

security@dogm.ai

Email the security team