Skip to main content
Orion Five Engineering

10 Jalan Kilang #04-05, Singapore 159410
+65 6100 5505

Book a scoping call
← All insights

Systems integration

Unifying your data can remove the access controls that protected it

Connecting scattered data is the first step. Once that unified data feeds or trains a model, the permissions that kept finance data separate from HR data do not carry over automatically.

Terence Kok · 2026-07-29 · 5 min read

A matte white machined enclosure with a recessed keyed access port on its face, the port ring red and lit from within.

Executive summary

2

separate ways that data leaks, each needing a different fix

Key conclusions

  • Source-system permissions do not travel with the data. A model can repeat anything it can read to anyone who asks.
  • Retrieval leaks are fixed by filtering each query against the user's actual access rights. Fine-tuning leaks are prevented by excluding restricted content before training.
  • Test the system as an attacker would: log in as a low-privilege user and ask for something only a high-privilege user should see.

A model does not check a user's job title before it answers. It can repeat anything it can read. The controls that kept the source systems safe were part of those systems, and the documents do not carry them.

Solving the first problem creates this second one. Plan for it at design time, because both of its causes are difficult to detect afterwards.

Data leaks through two routes, and each needs a different fix

  1. Retrieval returns a document the user should not see. The fix is to filter each query against the user's actual access rights.
  2. Fine-tuning makes the model memorise the restricted fact itself. The content is then inside the model's weights, where no retrieval filter can catch it. The fix is to exclude that content before training, because afterwards there is nothing to filter.

Apply access control to each query before it reaches the model

A white scale-model turnstile gate with a red access reader on its post.

The lasting solution is to treat access as a property of each request instead of each document. For every request, the system checks who is asking and what they are entitled to see. It then confirms that the retrieval respects those rights before anything reaches the model.

Then test the system as an attacker would, before a real attacker does. Log in as a low-privilege user and ask for something only a high-privilege user should have. The test takes an afternoon, yet most acceptance criteria do not include it.

Related insights


All insights

Related service


Book a scoping call