Skip to content
Centriu
Centriu Vértice

Member-to-Member Mutation Boundary Automation: Who May Touch a Row Is Not What They May Change In It

Centriu Vértice's database access-control policies for its two-sided records — a connection request with a sender and a recipient, a business deal with a party who declares an outcome and a party who confirms it — correctly answered the question of WHO may touch a given row (either party involved in it), but the identical policy expression governed both reading and writing, so it never separately answered the necessary follow-up question of WHAT either specific party may actually change within that row. Measured directly against production using a synthetic member's own real session token — the same access anyone reaches by copying their own browser's cookie — five specific boundaries yielded to a direct write: either party in a shared record could rewrite context the other party had already submitted, and, most consequentially, the party DECLARING a business outcome could unilaterally set the exact columns the product's own public network scoreboard reads to prove real business activity — meaning that scoreboard number was, functionally, self-reported by whichever party had the most direct interest in a favorable result. A second, entirely unlisted exposure surfaced specifically while verifying the intended fix: a database view configured to allow direct writes, owned by a role with row-level-security-bypass privilege and without its own invoker-security setting, let a write reach the underlying table with row-level security completely absent from the path — a fix scoped only to the underlying table would not have reached it, and the product's own end-to-end verification journey, which specifically exercises the table rather than the view, would not have caught the gap either. Both were closed together by revoking direct write privilege — rather than attempting to encode a state-transition rule inside a more elaborate policy expression — from every table and the view in the affected data family, confirmed safe by a whole-product inventory finding zero legitimate uses of a member's own session token for any of the affected writes.
Self-declared scoreboard
51 tables + 1 view closed
Shared record mutation boundary screen
Who may touch a row is not what they may change.

"Who can touch this row" and "what can they change in it" are two different questions

A row-level security policy answering who may access a specific database row is a genuinely strong, foundational access control — and for a record that belongs entirely to one person, answering that single question is often sufficient on its own. The gap opens specifically for a TWO-SIDED record: a row that legitimately belongs, in some sense, to two different people at once (a request has a sender and a recipient; a deal has a party who reports an outcome and a party who confirms it). A policy that grants either party access to the shared row, using the identical expression for both reading and writing, has correctly identified who may touch the row — and has said nothing at all about which specific fields within that row belong to which party's own side of the transaction. Every write either party makes passes the same single check, regardless of which half of the row it actually changes.

How the underlying problem shows up before you fix it

A two-sided database record (a request between two parties, an agreement with a declaring side and a confirming side) uses one row-level security policy expression for both which rows a person may see and which rows they may write to — collapsing two genuinely different questions into one answer.

A party on one side of a shared record can, through a direct write, alter the specific fields that represent the OTHER party's side of the same transaction — context they submitted, a decision they recorded, a status only they should be able to set.

A specific field that a product's own public-facing metric or scoreboard reads directly is writable by the exact party who has an interest in that metric showing a particular result — turning what is presented as a measured, objective figure into something closer to a self-report.

A fix scoped to a database TABLE does not automatically extend to a VIEW built on top of that table, when the view itself is separately configured to allow writes, is owned by a role with elevated privilege, and does not enforce security under the querying user's own identity — the view can silently remain a second, independent path to the identical underlying data.

An automated end-to-end verification suite exercising a product's real, customer-facing pathways can pass cleanly even after a genuine access-control gap is identified and "closed," specifically when the actual exploitable path (here, a database view) is not the object the verification journey happens to interact with.

How a shared row learned that touching it and changing any part of it are not the same permission

Centriu Vértice's database enforces row-level security so that a member can only see and act on rows relevant to them — a genuinely strong default. For its two-sided records specifically — a connection request between a sender and a recipient, a business deal between a party who declares an outcome and a party who confirms it — the SAME policy expression governed both which rows a member could read and which rows a member could write to. That single expression correctly identifies that either party belongs to the shared row. It says nothing at all about which specific COLUMNS within that row represent which party's own contribution — so a write from either side, touching any field in the row, passes the identical check regardless of whose part of the transaction it actually changes.

Measured directly against the real production database, using a synthetic member's own genuine session token — precisely the level of access anyone reaches simply by copying their own browser's authentication cookie — five specific boundaries yielded to exactly this gap. A pending connection request could be altered by either the sender or the recipient's own direct write, moving it toward states neither had actually chosen through the product's real approval flow. Either party in an existing relationship could overwrite context the other party had separately submitted. Most consequentially: the party responsible for DECLARING a business deal's outcome could, through a single direct write, set the specific columns the product's own public network-health scoreboard reads as evidence of real business activity happening between members — meaning a number presented as an objective, measured fact about the network was, in practice, directly settable by the one participant with the clearest interest in that number looking favorable.

The fix, closing this alongside a related, larger residual (Centriu Vértice's own team documents it as deliberately scoped to this specific data family, leaving the remaining, separately-tracked broader table population for its own dedicated closure), does not attempt to solve the problem by writing a more elaborate row-level security policy that tries to encode a state-transition or field-ownership rule declaratively inside a SQL expression — the fix's own reasoning names that approach as fragile to write correctly and harder still to verify than the alternative actually chosen. Instead, direct write privilege for the ordinary, session-based database roles is revoked entirely across every table in the affected data family, leaving the product's own trusted, elevated internal write path as the sole route by which any of these records can actually change — a decision made safe specifically because a full inventory of every place in the product's own code that could write to this family, using a member's real session token, found exactly zero legitimate consumers. The privilege existed with no actual product feature depending on it at all.

A second, genuinely unlisted exposure surfaced specifically during the work of verifying that this fix actually closed everything it needed to: one specific database object in the affected family was not an ordinary table at all, but an auto-updatable VIEW — a database object that looks and behaves like a table for read and write purposes, built as a convenience layer over the real underlying data. That view was owned by a database role holding a privilege that bypasses row-level security entirely, and the view itself was not configured to enforce security under the identity of whoever was actually querying it. The practical consequence: writing through the view reached the real, underlying table with row-level security completely absent from the path — a revoke applied only to tables, however correctly scoped otherwise, would have left this one specific route to the identical data fully open. It is worth stating plainly why this was not caught by the product's own extensive automated verification: that verification's real, end-to-end browser-driven journeys interact with the actual table through the product's normal interface, not through a direct write to this specific view — a gap that exists in the view, rather than in what the ordinary product flow itself does, would simply never be exercised by that verification path at all. Both the table family and the view were closed together in the same fix.

What is actually built today

Direct write privilege for ordinary session-based database roles is revoked across every table in Centriu Vértice's connection/deal/opportunity data family, leaving the product's own trusted internal write path as the sole route these records can change through — confirmed safe by a full code inventory finding zero legitimate consumers of the removed privilege.

The same revoke reaches the specific database VIEW in this family that had separately allowed a write to bypass row-level security entirely via an elevated-privilege owner and a missing invoker-security setting — closed alongside the underlying tables, not left as a second, independent path to the same data.

The product's own public network scoreboard no longer reads a value any single party to a business transaction could unilaterally set through a direct database write — that value now reaches the scoreboard only through the product's own trusted, elevated write path.

A full, product-wide inventory of every code path capable of writing to this data family, using a member's own session token, is documented as finding exactly zero legitimate consumers — confirming the removed privilege had no real feature depending on it.

Read access (row-level security governing what a member can SEE) is entirely unaffected by this fix — only the separate, previously-uncontrolled write path is closed.

A scoreboard, self-reported by the one party grading it (illustrative framing of the actual measured finding)

Before the fix, the party responsible for declaring a business deal's outcome inside Centriu Vértice's network could, through a single direct database write reachable with nothing more than their own ordinary session, set the exact fields the product's own public scoreboard reads as proof of real economic activity between members — turning a number presented as objective, network-wide evidence into something a single interested party could set directly. A completely separate exposure, found only while verifying this exact fix, showed the identical underlying data reachable a second way: through a database view whose own configuration bypassed row-level security entirely, regardless of what the fixed table-level permission now enforced. After the fix, neither the tables nor the view accept a direct write from an ordinary member session — the scoreboard's figures now reach it exclusively through the product's own trusted, elevated internal path.

What changes operationally

Centriu Vértice's connection, deal, and opportunity data family — including a database view that had separately bypassed row-level security through an elevated-privilege owner — no longer accepts a direct write from an ordinary member's own session token, closing five measured boundaries where either party to a shared, two-sided record could alter the other party's own contribution, most consequentially the columns the product's own public network scoreboard reads.

When this is not the right fit

This automation governs the internal database write-boundary between two parties sharing a single record inside Centriu Vértice's own curated network — it does not change what a member can do through the product's own normal interface (the product's own trusted write path remains the sole, unaffected route for every legitimate action), and is specific to a two-sided-record access pattern; a system where every record belongs to exactly one party, with no shared-row concept at all, would not be exposed to this specific class of boundary gap.

A single access policy per row vs. a boundary between what each party may change within it

Using one row-level security policy expression to govern both who may see and who may write to a shared, two-sided row is the simpler design, and is entirely correct for the "who" question — the gap is specific to the unasked "what" question, which only becomes visible once a row genuinely has two distinct parties with two genuinely distinct sets of fields they should each individually control. Revoking direct write privilege outright and routing every legitimate change through one trusted, elevated write path sidesteps the need to encode field-level, party-specific transition rules inside declarative policy expressions at all — at the cost of requiring every legitimate write to go through that one trusted path, which this fix confirmed, by full inventory, was already the case.

Related systems

Main system: Centriu Vértice.

What it does NOT do

  • Does not change what a legitimate Centriu Vértice member can do through the product's own normal interface — the product's own trusted, elevated write path remains the sole route for every real feature, confirmed unaffected by a full code inventory before the fix shipped.
  • Does not touch row-level security's READ behavior — a member continues to see exactly the rows they were always able to see; only the separate, previously-open direct WRITE path is closed.
  • Does not close the full 827-object residual documented separately for this module (a broader table population using the same underlying platform default) — that is tracked and closed as its own, later, dedicated effort, deliberately out of scope for this specific fix.
  • Does not retroactively identify whether any specific business deal's recorded outcome was actually altered through this exposure before the fix shipped — production measurement at fix time showed zero rows created in the affected tables, and a team with a broader historical concern would need its own separate audit.
  • Does not overlap with the other two fixes shipped in the same commit (a consent-form hydration timing fix, and a phone-verification-ceremony removal) — both are covered on their own companion pages and are architecturally unrelated to this database write-boundary correction.

Security and governance

Centriu Vértice's connection, deal, and opportunity data family — tables and one previously-overlooked auto-updatable view — no longer accepts a direct write from an ordinary member's own session token, closing a boundary where either party to a shared, two-sided record could alter the other party's own contribution. Any personal or business data referenced in these records remains subject to Brazil's LGPD (Law No. 13,709/2018). Full detail on access control lives at /governanca and /iso.

Pricing and contracting

Available on a single plan. Values and terms come from the official pricing table at /precos (Centriu's central source — never restated here).

Frequently asked questions

Could a member actually rewrite the public network scoreboard, or is this theoretical?

Measured directly against production with a synthetic member's own real session token: the party declaring a business deal's outcome could set the exact columns the scoreboard reads, with a direct write succeeding (HTTP 200) before the fix.

Why did closing the table-level permission not fully close the gap?

One specific object in the affected data family was a database VIEW, not a table — owned by a role with row-level-security-bypass privilege and without its own invoker-security setting, so a write through the view reached the underlying table with row-level security entirely out of the path. Closing only the table would have left this route open.

Why wasn't this caught by the product's own automated end-to-end tests?

Those tests exercise the product's real, customer-facing journeys, which interact with the underlying table through the normal interface — not with the specific view where this particular bypass lived. A gap in an object the normal product flow never directly reaches will not be caught by testing that flow.

Why revoke the privilege entirely instead of writing a more precise access policy?

The fix's own account calls a declarative policy attempting to encode which specific fields each party may change fragile to write correctly and harder to verify. A full inventory found zero legitimate uses of the removed privilege anywhere in the product's code, making an outright revoke both safe and simpler.

Does this affect a member's ability to see their own connections and deals?

No — row-level security's read behavior is completely unchanged. Only the separate, previously-open direct write path (bypassing the product's own trusted write mechanism) is closed.

What does Centriu Vértice cost?

It is sold by subscription with a published starting price — exact current values are on the central pricing page.

See how Centriu Vértice protects shared records between members

Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.

Sources

  1. Centriu Vértice — public product page — Centriu, 2026-07-20 · link(primária)
  2. Centriu Vértice — public factsheet (API, JSON) — Centriu, 2026-07-21 · link
  3. Law No. 13,709/2018 — Brazil’s General Data Protection Law (LGPD) — Presidência da República (Brazil), 2018-08-14 · link

Last material update on .

By · AI-assisted production, with human review