Curated Network Connection-Graph Function-Overload Automation: A Name Is Not a Signature

A cleanup script is only as precise as the identifier it searches by
Writing a script to find and close every database function a specific role can still call is a genuinely sound way to verify an access-control migration actually worked — measuring the real, resulting privilege rather than trusting that the SQL that granted or revoked it did what it was meant to. The precision of that verification depends entirely on how uniquely the script identifies which functions to check. A database function's plain name is a convenient, human-readable identifier — and, in a system that uses function overloading (multiple functions sharing one name, distinguished only by their parameter types, a standard and often deliberately-used database feature), a name alone can refer to more than one actual function. A script built to search by name can correctly close one signature while remaining completely unaware a second, differently-signed function with the identical name still exists, still has its own separate privilege, and was never examined at all.
How the underlying problem shows up before you fix it
A script written to enumerate and close database functions accessible to a specific role identifies which functions to check by NAME, in a database that uses function overloading — multiple, genuinely different functions sharing one name, distinguished only by parameter signature.
A cleanup or closure pass correctly acts on one overload of a function sharing a name with another, unrelated overload — and reports success, because from the script's own perspective, the named function WAS found and closed; it has no visibility into a second, differently-signed function hiding behind the identical name.
The specific functions left exposed by this gap are not randomly chosen — they are whichever overload happens not to be the one the script's own logic happened to match, meaning the gap is systematic and repeatable rather than a one-off coincidence.
At least one of the exposed functions answers a question directly at the core of what the product sells — in a curated, relationship-based network, knowing who is connected to whom is not incidental data, it is close to the entire value proposition.
Verifying both the original gap and the fix requires a LIVE measurement against the real database — distinguishing "this specific function signature genuinely denies access" from "this function does not exist" from "a different, still-open overload answered instead" — not merely re-reading the migration SQL, which shows what was intended, not what a role can actually still call.
How two function overloads survived a script written specifically to close them
As part of closing public database access after a batch of security migrations, Centriu Vértice's own team wrote a dedicated verification script specifically to find every database function the anonymous, unauthenticated role could still invoke — a genuinely rigorous step, going beyond re-reading migration SQL to actually measuring the resulting privilege against a real database.
That script identified candidate functions by matching Postgres's own function-name column. In a database that uses function overloading — the same function name serving two or more genuinely different functions, distinguished only by which parameter types each one accepts, a standard and, in this codebase, deliberately-used feature — a name-based match cannot distinguish between them. Two specific overloaded signatures, sharing a name with a sibling overload that HAD already been correctly closed, were invisible to the script for exactly that reason: from the script's perspective, that function name had already been handled.
The two overloads that slipped through were confirmed, by probing the real production database with a calibrated test distinguishing "the object does not exist" from "permission is explicitly denied" from "the function genuinely answered," to still be fully callable using nothing but the public anonymous key. One answers whether two specific network members, identified by their own internal identifiers, are connected to each other — in a curated, application-only professional network, this relationship graph is not an incidental detail; it is close to the core of what the product actually offers a paying member. The second governs access tied to staff-only internal messaging, reachable through a parameter-based calling convention that no actual, legitimate policy anywhere in the product's own code was found to use in that specific overloaded form.
The fix revokes execute privilege from the two specific, exact signatures that remained open — not the function name in general, which would also have closed a DIFFERENT, legitimately-used overload of the connection-checking function that a separate row-level security policy elsewhere in the product depends on to correctly evaluate a member's own visible connections. A row-level security policy expression runs with the privilege of whoever is running the query that triggered it, not the function owner's — removing that overload's own privilege entirely would have broken a legitimate, currently-working feature rather than closing only the actual gap. The fix's own verification required a specific, deliberate first step before doing anything: a check confirming the anonymous role genuinely still had access to the target overloads BEFORE the fix ran, specifically because attempting to revoke a privilege that does not exist produces no error in PostgreSQL — a script that skipped this check could report success on a revoke that changed nothing, having targeted a signature that was never actually open.
What is actually built today
The two specific, exact function signatures previously reachable by the anonymous role — one answering whether two members are connected, one tied to staff-only messaging — no longer accept the anonymous role's execute privilege.
The function's OTHER, legitimately-used overload — the one a row-level security policy elsewhere in the product depends on to evaluate a member's own visible connections correctly — retains exactly the privilege it needs, unaffected by this fix.
The verification approach measures actual, live database privilege using a calibrated probe distinguishing "object does not exist," "permission denied," and "genuinely answered" — rather than trusting that migration SQL alone accomplished what it was written to do.
A mandatory pre-check confirms the anonymous role genuinely had access to a target function signature before attempting to revoke it, specifically because a revoke against a privilege that was never granted succeeds silently in PostgreSQL without indicating anything changed.
The fix required no change to the connection-checking or messaging features themselves for any legitimately authorized caller — only the specific, previously-open overloaded signatures that no legitimate caller should have been reaching at all.
A relationship graph, readable by anyone with the public key (illustrative framing of the actual measured finding)
Before the fix, anyone holding Centriu Vértice's public anonymous key — present, by design, in the browser bundle of any page the product serves — could call the specific function checking whether two given members were connected, supplying any two real member identifiers, and receive a genuine true-or-false answer about a private professional relationship, with no login and no membership of their own. After the fix, the identical call is rejected outright: the anonymous role holds no execute privilege on that specific function signature, while a legitimately logged-in member's own, correctly-scoped view of their own connections continues to work exactly as designed, through the separate overload the fix deliberately left untouched.
What changes operationally
Centriu Vértice's connection-graph and staff-messaging database functions no longer accept the anonymous role's execute privilege on the two specific overloaded signatures a name-only cleanup script had missed, while the product's own legitimate use of a sibling overload — relied on by an existing row-level security policy — continues to work exactly as before, verified by a live measurement against the real production database rather than a reading of the migration SQL alone.
When this is not the right fit
This automation governs the internal database access-control verification methodology behind Centriu Vértice's own curated professional network — it does not change what a logged-in, authorized member can see about their own connections, does not add a customer-facing setting, and is specific to a database that uses function overloading; a system where every function name maps to exactly one signature would not be exposed to this specific class of gap in the first place.
Verifying access by function name vs. by exact signature
Writing a verification script that identifies functions by name is simpler to write and, in a database with no function overloading at all, is completely sufficient — the risk is specific and easy to overlook in any system that DOES use overloading deliberately elsewhere, because a name-based check can report a clean result while a sibling function sharing that exact name remains entirely unexamined. Matching by a function's full, exact signature — name plus parameter types together — closes that gap directly, at the cost of a script that has to reason about signatures rather than the more convenient, but structurally incomplete, plain name.
Related systems
Main system: Centriu Vértice.
What it does NOT do
- Does not change what a logged-in, authorized member of Centriu Vértice's curated network can see about their own connections — that legitimate access continues to work through the function overload this fix deliberately preserved.
- Does not affect any part of the product outside these two specific function signatures — the fix is scoped exactly to the overloads the original name-based script missed, confirmed by live measurement, not a broader access-control rewrite.
- Does not retroactively identify whether any specific connection lookup was performed by an unauthorized party before this fix shipped — a team with that concern would need its own historical access-log review, which this fix does not provide.
- Does not change the underlying database schema or add a new access-control layer — the fix is entirely a privilege correction (`revoke`) on two already-existing function signatures.
- Does not overlap with the curated-network admission-gate checkout fix — that fix (covered on a companion page) closes a separate, commercial storefront-logic gap from the same investigation, unrelated to database function privilege.
Security and governance
Centriu Vértice's database functions are verified against live, measured privilege — not migration SQL alone — with execute access scoped to the exact function signature a caller needs, correctly distinguishing between overloaded functions that share a name but serve entirely different, separately-privileged purposes. Any personal data referenced in member connection 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
What is a function overload, in plain terms?
Two or more database functions that share the exact same name but accept different parameters — a standard, common database feature. A script or check that identifies a function only by its name cannot always tell these apart, and may correctly close one while never examining the other.
Was the connection-checking function actually callable by the public, or is this theoretical?
Measured directly against production with a calibrated probe: the specific overloaded signature answered genuinely (a real true-or-false connection result) using only the public anonymous key, before the fix.
Why wasn't the connection-checking function's privilege revoked entirely?
Because a DIFFERENT overload of a related function is relied on by an existing row-level security policy elsewhere in the product, which needs to evaluate under the querying user's own privilege. The fix revokes only the two specific signatures confirmed open, preserving the one still legitimately needed.
How was the fix itself verified, given a revoke on a nonexistent privilege produces no error?
The fix includes a mandatory pre-check confirming the anonymous role genuinely had access to each target signature BEFORE attempting to revoke it — specifically to prevent a script from reporting success on a revoke that silently changed nothing.
Is this the same fix as the admission-gate checkout page?
No — that page covers a separate, commercial storefront-logic gap (being able to purchase membership without approval) from the same investigation. This page covers only the database function-overload privilege gap.
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 verifies database access by exact function signature
Reach our commercial team directly, or leave your details below — we'll follow up with guidance for your case.