Security and trust

Security is a product feature, not a later checklist

Procurevent holds commercially sensitive pricing, supplier documents and confidential event information. Below is what is in place today, and what is committed for launch — separated, because the difference matters.

In place today

Controls built into the database

These are not roadmap items. They are in the schema, and the isolation suite tests them on every change.

In place

Row-level security, forced

Every tenant table carries FORCE ROW LEVEL SECURITY, so policy applies even to a migration running as the database owner. 75 policies across 46 tenant tables.

In place

Transaction-local tenant context

Each request sets its tenant identity for the duration of one transaction only. Session-scoped context would leak one tenant onto the next request sharing a pooled connection — the most likely way a product like this leaks data.

In place

Immutability enforced by trigger

Audit events, award snapshots, approval actions, request versions and clarification messages reject UPDATE and DELETE outright. A comment saying "do not edit this" is not a control.

In place

Exact decimal money

Monetary values use fixed-precision decimal domains, never floating point, enforced on every one of roughly forty columns that stores a value.

In place

Workflow state as database enums

No application bug can write an invalid status into a request. New states are added deliberately, by migration.

In place

European data residency

PostgreSQL 17 hosted in Frankfurt, in the EU. Chosen at provisioning time rather than migrated to later.

In place

Isolation tested against a least-privilege role

The isolation suite connects as the restricted application role, not the owner — an owner account bypasses row-level security, so a suite run as owner would pass identically against a database with no security at all. Every positive assertion is paired with a negative control.

Committed for launch

Controls we are building, stated as commitments

The application and its API are still in development. These are commitments for the first production release, not descriptions of something you could test today.

ControlLayerStatus
Multi-factor authentication for administrative and buyer accountsIdentity provider integrationCommitted
Private object storage with short-lived signed access URLsSupplier documentsCommitted
Rate limiting and bot protectionEdge layerCommitted
Security headers and web application firewall configurationEdge layerCommitted
Dependency scanning in continuous integrationBuild pipelineCommitted
Regular backups with tested restoresOperationsCommitted
Incident response playbookOperationsCommitted
Production access control, no shared administrator credentialsOperationsCommitted

Privacy and GDPR

Built from the beginning, not retrofitted

Procurevent will often act as a processor for a buyer's data. That has to be confirmed contractually per service model rather than assumed, and the underlying mechanics have to exist from the start.

  • Data processing agreement template, with controller and processor roles mapped per service model
  • Privacy notice and a maintained subprocessor register
  • Data retention policy, with subject access, export, correction and deletion workflows
  • Tenant data export, and a tenant deletion process with legal retention exceptions
  • Data minimisation in forms — we do not collect what we do not need

Public procurement

Where our boundary is

Procurevent is not marketed as compliant with Hungarian EKR, TED, EU eForms or the public procurement directives. EU eForms are standardised, directive-linked notice formats used by public buyers publishing through TED, and supporting them properly is a separate programme requiring specialist procurement counsel, formal requirements traceability and conformance testing. A public-sector edition may follow. It does not exist today, and we will not imply that it does.

Send us your security questionnaire

If your organisation has a vendor assessment process, we would rather go through it early than discover a blocker late. We will answer honestly, including where the answer is 'not yet'.