Engineering

Database Security Audit: can customers see each other's data?

The Database Security Audit is an audit and fix of who can read and change what in your database, table by table and function by function. From £799, with an optional £49 a month re-check. Report and fixes in 7 days.

From £799

Report and fixes in 7 days

01

Why can an app that works still leak customer data?

Most apps check who you are at the login screen, then trust every request after it. Anyone who skips the screens and talks to the database directly can often be handed every customer's records.

It is the most common hole in apps built quickly or with AI tools. The app looks finished and works in testing, because testing never tries to read someone else's data.

The fix is to put the rules in the database itself, table by table, so it refuses anyone who is not the owner - whatever screen, script or tool is asking.

02

How is a database audit different from a penetration test?

A penetration test looks at what an outside tester can reach in the time they have. The Database Security Audit reads every table, function and key from the inside, makes and rehearses the fixes, and checks them against the live database.

Assume it is fineA general penetration testDatabase Security Audit
Who looksNobodyAn outside testerMe, reading every rule
What is checkedNothingWhat can be reached from outsideEvery table, function and key
FixesNoneA list for your developerMade, rehearsed, applied
ProofNoneA reportChecked against the live database
AfterwardsYou find out from a breachNext year's testAn optional monthly re-check

03

What does a database security audit include?

The Database Security Audit gives you row-level security on every table, public back doors closed, a scan for 13 kinds of leaked key, a dangerous-command blocker, a rebuild file proven against live, rehearsed fixes and a plain report.

  1. 01

    Row-level security

    A rule on every table saying which rows each person may see or change - like a filing cabinet that only opens your own drawer.

  2. 02

    Back doors closed

    Every back-end function checked, and the ones the public should never call locked so they cannot.

  3. 03

    A secrets scan

    Your code and its history searched for 13 kinds of leaked password or key, without printing any of them.

  4. 04

    A dangerous-command blocker

    A guard that stops "delete everything" commands before they run - from a person or an AI tool.

  5. 05

    A proven rebuild file

    One file that can recreate your database from scratch, checked against the live one so nothing is missing.

  6. 06

    Fixes, rehearsed

    Every change tried first in a practice run that undoes itself, then applied.

  7. 07

    A plain report

    What was open, what we closed, and what is left, in words an owner can read.

04

What does a database audit report show?

A Database Security Audit report lists every table, function and key, says whether each is locked to its owner, and marks what was fixed or closed. Every fix is proven against the live database. Here is a sample.

audit report

  • customers - locked to owner: yes
  • invoices - anyone could read: FIXED
  • bookings - locked to owner: yes
  • get_invoice() - callable by the public: CLOSED
  • refund() - callable by the public: CLOSED
  • keys in the code: none found
  • rebuild file vs live: 0 missing
  • DELETE with no WHERE: blocked
  • DROP TABLE: blocked
We ran it on GigXchange first
  • 277tables locked with row-level security
  • 490access rules on those tables
  • 1,925recorded database changes
  • 133unsafe functions one drift check caught

Source GigXchange's own figures, as of 25 October 2026

05

How long does a database security audit take?

The Database Security Audit takes seven days from the day read-only access arrives: two to read every rule, day three for the report, three days of rehearsed fixes, and day seven to prove them against live.

  1. 01

    Days 1-2

    Read

    With read-only access, every table, rule, function and key is listed and checked.

  2. 02

    Day 3

    Report

    What is open, how serious it is, and the fix for each - before anything changes.

  3. 03

    Days 4-6

    Fix

    Each fix rehearsed in a practice run that undoes itself, then applied with your go-ahead.

  4. 04

    Day 7

    Prove

    The rebuild file checked against live, the blocker and secrets scan installed, the report closed.

06

Is a database security audit right for your app?

The Database Security Audit suits an app on Supabase or Postgres where customers log in and keep data, especially one built fast or with AI tools. It is the wrong buy if you need a certified penetration test for a contract.

A good fit if

  • Your app runs on Supabase or Postgres
  • Customers log in and keep data with you
  • Your app was built fast, or with AI tools

Not for you if

  • Your data lives in spreadsheets or a site builder
  • You need a certified penetration test for a contract
  • You cannot give read-only database access

Questions

07

Asked and answered

Row-level security is a rule inside the database that decides which rows each signed-in person can see or change. Without it, the database trusts the app's screens to hide other people's data - and anyone who skips the screens sees everything. With it, the database refuses on its own. On Supabase it is switched on per table, as Supabase's own guide explains; GigXchange has it on 277 tables.

Every table, back-end function and stored key checked, every hole fixed, and proof the fixes match the live database. That means row-level security on each table, functions the public should not call locked away, a scan of your code for 13 kinds of leaked key, a blocker for dangerous commands, and a rebuild file checked against live. You get a plain report of what was open and what is now closed.

Not if they are done in the right order, which is why every fix is rehearsed first. Each change runs in a practice transaction - a trial that undoes itself automatically - signed in as your real user types, so we see exactly what each person can and cannot do afterwards. Only then is it applied, with your go-ahead. If a screen relied on a hole, we fix the screen too.

No - the audit reads the structure of your database, not your customers' records. I need read-only access to the rules, tables and functions; the rows themselves stay untouched and unread. Fixes are applied with your approval, one at a time. This is also part of the "appropriate security" UK GDPR expects; the GDPR Compliance Kit covers the rest of that paperwork.

The £49 a month re-check is optional: it reruns the audit checks every month and tells you if anything has drifted. New tables get added, a developer opens a rule for a quick test and forgets it, an AI tool writes a function without a lock. The re-check catches those before they sit open for months. Cancel any month; the fixes from the audit stay in place.

A penetration test tries to break in from outside; this audit reads every rule from the inside and fixes what it finds. A tester sees what they happen to reach in the time they have. Reading the rules shows every table and function, including the ones nobody has found yet. If a contract demands a certified test, you still need one - this makes it far more likely to come back clean.

Seven days from the day read-only access arrives. Days 1-2 are reading, day 3 is the report, days 4-6 are the rehearsed fixes and day 7 is the proof against live. A very large database can take longer, and I will say so after day 1 rather than on day 7. Your app stays live and usable the whole time.

You hear about it the same day, with what was exposed and since when, so you can decide what to do. A personal data breach that risks people's rights must be reported to the ICO within 72 hours of you becoming aware of it. The hole gets closed first. An Incident & Continuity Plan writes down who does what on that kind of day, before it comes.

AI that works for small business.