Security

How your migration data is kept separate and controlled

HR migration data is highly confidential. This page states what is implemented and, just as plainly, what is not.

Tenant isolation enforced by the database
Every customer-owned table carries an organization id with PostgreSQL row-level security. The application runs tenant work as a role that cannot bypass it, and each request is pinned to one organization. A query that forgets its tenant filter returns nothing rather than someone else’s data. Isolation is tested by having one tenant attack another.
Separate demo and production
The free demo and the production application are different deployments with different databases, storage, session cookies and keys. A demo account cannot sign in to production, and the demo can never reach a real SAP tenant.
Passwords and sessions
Passwords are hashed with scrypt. Session cookies are random, HttpOnly, SameSite and Secure; only their digest is stored. Sign-in is rate limited. Verification, reset and invitation links are single-use and stored only as digests.
Approvals and separation of duties
Mappings, plans and exceptions need an authorised approver. In production the person who wrote a mapping cannot approve it, and the people who approved a mapping or plan cannot execute against SAP. Execution needs a second person to confirm.
An audit trail the application cannot rewrite
Audit events are append-only: the application role can insert and read them and nothing else. They record identifiers, counts and decisions, never HR record values or credentials.
Sensitive data is kept out of the wrong places
National identifiers, pay, bank and termination data are never placed in logs, finding samples, rejected-record files or audit detail, and are never sent to a language model. Columns that look sensitive are masked in the interface.
Credentials are encrypted and write-only
Stored SAP credentials are encrypted with a key derived per organization from a master key held outside the database. They can be written but never read back through the application, and never reach the browser, logs or an AI prompt.
Untrusted files are treated as untrusted
XML with DOCTYPE or entity declarations is refused, uploads are type- and size-checked, archives are not accepted, and spreadsheet-formula values are flagged. Transformation rules are a closed vocabulary with no code evaluation.
Production writes to SAP are off by default
Direct API loading needs a deployment switch, a plan entitlement, a validated connection, a per-entity allow-list, approved mapping and plan, a passing preflight and a typed confirmation by a second approver. A failed write is never retried automatically.

What we do not claim

Stated here rather than left for you to discover during procurement.

Formal certification
NexaQora holds no SOC 2, ISO 27001 or comparable certification, and no GDPR attestation. It provides controls that support such programmes.
Independent penetration test
None has been commissioned yet. The properties above are implemented and tested by us.
Single sign-on and multi-factor authentication
Neither is implemented yet.
A verified SAP connection
The direct SAP connector has only been tested against a mock service and must be verified in your own non-production tenant before use. File-based import is the primary path.
Customer-managed encryption keys
Not supported. Use disk-level encryption and TLS to the database.
An uptime commitment
No service level agreement is offered.

Questions from your security team?

Send them to writetomadhusudan@gmail.com. Specific questions get specific answers, including where the answer is “not yet”.