Walled off in the database, not in the app
Each customer is separated by row-level security policies in the database itself. Application code cannot forget to filter, because the database will not return another customer’s rows to it.
- Isolation enforced by the database, on every query
- Automated tests attempt cross-customer reads and fail the build if one succeeds
- Each customer works on their own address
- Records a customer has not switched on do not exist for them, rather than being hidden

