- Tables under row-level security
- 76 of 76
- Explicit access policies
- 238
- Triggers
- 45
- Procedures
- 53
Security controls, and how each is implemented| Control | Implementation |
|---|
| Isolation at the row | Row-level security on all 76 tables, with 238 explicit policies scoped to the authenticated identity. |
|---|
| Role separation | Roles live in a dedicated table and are evaluated through a security-definer function, which removes the escalation path that role-on-profile designs create. |
|---|
| Credential handling | Device API keys stored encrypted and matched by hash; third-party tokens encrypted at rest and decrypted only inside privileged procedures. |
|---|
| Secret management | Service credentials held in a managed secret store and injected into the function runtime — never present in client code or in the database. |
|---|
| Schema-injection defence | Every database function pins its search path, so a procedure cannot be hijacked by a shadowed object. |
|---|
| Audit trail | A dedicated audit log records access to sensitive resources. |
|---|
| Data preservation | Destructive operations are soft deletes by default; history survives device removal and reinstallation. |
|---|
| Input validation | Schema validation with hard field caps at every ingestion endpoint, bounding both payload size and record counts. |
|---|
A compromised client, a mistaken query or a new developer cannot read another user’s data. The database itself refuses.