Audit and evidence

Database audit and evidence

A log and a piece of evidence are not the same thing. A log says what happened; evidence shows that what was written has not changed since. This page is about the second one.

Layers

Four defences: three inside, one outside

Each layer catches a different attacker. If one is bypassed, the next is still there. The first three are recording layers inside the product; the fourth sits entirely outside it and holds even against the organisation itself.

1. Signed audit trail

Every event is written into a chain that carries the digest of the previous one, signed with a secret key. Altering a single record means recomputing every record after it, and that cannot be done without the key.

Who it catches: someone with database access who does not have the key.

2. Sealed copy in a separate database

The full content of every audit record is sealed into a second database, ideally on a separate server. Only insert permission is granted there.

Who it catches: someone who has the key and rewrites the main record.

3. Database level record

Triggers on the tables write row changes into their own trail, independently of the application. An intervention made without touching the application still shows up.

Who it catches: someone who bypasses the application and goes straight to the database.

4. Verification outside the organisation

A signed anchor is delivered to the auditor on a schedule: "today my last record was this number and here is its digest." When the audit comes, the auditor compares the old anchor they already hold against today's records. The first three layers live on the organisation's servers; this fourth one lives in the auditor's own archive.

Who it catches: the organisation itself, holding every key and rewriting the past from scratch.

Verification happens from the screen. The audit screen has two separate buttons. One checks that the chain is internally consistent, the other compares the main record against the sealed copy. They prove different things and should be read together. The fourth layer is not run from the screen but from the auditor's own machine: how you verify the evidence yourself.

Evidence file

When the auditor samples one request

An audit usually goes like this: the auditor picks a change at random and asks for its story. Who asked for it, under which rule it was approved, who ran it, what the script was on the day.

The answer exports as a single file. It carries the identity block, a separation of duties summary, the timeline, the approval evidence, the script fingerprint, the risk breakdown, the sandbox result, the execution result, query delivery metadata, exceptions and the raw audit trail.

The file carries its own seal, and that seal is also written into the audit record. Comparing the two is how you tell whether the file changed after it was produced.

What is delivered is a single zip. Alongside the data it holds an identity file, the RSA signature over that file, the public key that checks the signature, and a verification script. The auditor can run that verification on their own machine without ever connecting to the product: how an evidence package is verified.

Two rules. For a query request the result itself never enters the file; only who received it and which column was approved unmasked, otherwise the file would become a new leak channel. Second, exporting the file is itself an event and is written to the audit record.

The sample data is fictional. Identifying fields were masked before publication, so the seal in this copy no longer verifies.

What it was that day

Explaining an old request after the rules change

The rule set is frozen onto the request

When a request is saved, the rule set and effective settings that shaped it are frozen into a single audit event. Six months later, even if the rules have changed, you can still read which rules the request was judged by.

Weakening a control is its own event

Turning a rule off or lowering its tier is not recorded as an ordinary settings change; it is marked under its own name. That makes "which controls were relaxed before the audit" an answerable question.

Four eyes on settings

A change on a settings screen is not written to the live record straight away. It waits as a pending entry for another user to approve. Approving your own request is always forbidden.

Exceptions are not hidden

Cases such as a requester executing their own request appear in the file as exceptions. Governance is not measured by the absence of violations but by whether they surface.

Reports

Thirty one built in reports, five groups

Group The question it answers
Change Governance Which requests were opened, how long they waited, who approved them, what ran and what was rejected.
Object & Structure Who touched which object, how often each object changes, where the collisions are.
Access & Authorization Who created accounts, who changed permissions, what privileged accounts did.
Data & Privacy Who accessed production data, which columns were masked, which requests modified data directly.
Configuration & Compliance Which settings changed, which control exceptions occurred, how the approval trail progressed.

Each report defines which roles may run it, and that restriction is enforced. Report output is in English.

Screens

Audit records screen with the event list and the chain verification buttons
Audit records The event list and the two verification buttons.
Reports screen with the grouped report list and the parameters
Reports Grouped report list with parameters.
Object change history screen showing the change records read from the target database
Object history The data is read from the target database itself.
Role permissions screen where request, approval, execution and visibility rights are defined per role
Role permissions The auditor's first question: who is allowed to do what.

Next