Skip to main content

Separated by the database,
not by good intentions

A school MIS holds the most sensitive records an institution keeps: safeguarding concerns, medical needs, bursary circumstances, family breakdown. The question is not whether a vendor intends to keep them separate. It is what happens when the vendor writes a bug.

How isolation is enforced

Application code decides what to ask for. Underneath it, the database decides what it is allowed to answer. Both have to agree before a row is returned.

01

Every school is its own tenant

A school is not a filter applied to a shared list — it is the boundary the data model is built around. Pupils, staff, records and files all belong to exactly one school, and there is no query in the product that legitimately spans two.

02

Separation is enforced in the database

Row-level security in Postgres restricts every table to the school making the request. The application connects under a role that cannot bypass those rules, so a mistake in application code cannot return another school’s rows — the database refuses before the query returns.

03

Unlisted data is unreachable, not merely unfiltered

The default is closed. A table that has not been explicitly scoped to a school is invisible to the tenant connection rather than accidentally readable, so the failure mode of a mistake is an empty result and a loud error, not a silent disclosure.

04

Roles inside the school

Staff see what their role allows. Safeguarding records are restricted to the designated safeguarding team, SEND documents to the people supporting that pupil, and finance to the bursary. Being a teacher does not make you an administrator.

05

Parents see one family

A guardian account resolves to the children linked to it and nothing else — not the class list, not other families, not the roll. Parents are invited by the school; there is no public sign-up that could attach someone to a pupil.

06

Files are separated too

Documents, medical letters, EHCPs and pupil media are stored under a per-school prefix, and a request for a file outside the requesting school’s own prefix is refused rather than served.

Why we build it this way

The common design for multi-tenant software is a shared database where every query filters by customer. It works right up until one query forgets, and then it returns somebody else's data with no error and no alarm. Putting the boundary in the database means the filter is not the thing protecting you — it is the second of two things, and the one that fails safe is underneath.

Operational practice

Encryption

Traffic is encrypted in transit with TLS. Backups and stored files are encrypted at rest.

Audit trails

Access to safeguarding, SEND and finance records is logged with the user, the record and the time.

Backups

The database is backed up on a regular schedule, with restores tested rather than assumed.

Two-factor authentication

Available for staff accounts, and can be required for the roles that hold the most sensitive records.

Least privilege

Staff roles grant the narrowest access that lets someone do their job, and are set by the school, not by us.

Incident response

If a breach affects your data you are told, with what happened and what we did — not a status page.

Procurement will want this in writing. Ask during a demo and we will send the data processing agreement, our sub-processor list and answers to your own security questionnaire before you commit to anything.

Questions DPOs ask

Where is our data held?
On servers in the UK, in a database dedicated to Chanceria. Your school’s records are not held in a shared database with unrelated products.
Is Chanceria a public directory of schools?
No, and this matters more than it sounds. Chanceria is software you run internally. Your roll, your staff list, your fees and your families are not published, indexed or exposed to an anonymous visitor anywhere on the platform.
Who at Chanceria can see our records?
Access to production data is limited to the engineers who maintain the service, and is used for support and incident response. It is not used to browse school records, and support access should always be at your request.
How is safeguarding information protected?
Safeguarding concerns and allegations are restricted to the staff you designate, separately from ordinary staff permissions, and every view and change is recorded in an audit trail. A teacher with access to a class register does not thereby have access to that class’s safeguarding records.
What happens if we want to leave?
You export everything. Each school has API keys and a versioned REST API, and a full export is a supported operation. Data portability is designed in, not negotiated at the end of a contract.
Are you a data processor or a data controller?
For pupil and family records, the school is the controller and Chanceria is the processor acting on your instructions. A data processing agreement forms part of the contract — ask for a copy during procurement and we will send it before you commit to anything.