docs(breg): state that the migration role must not hold CREATE on the database in Provision PostgreSQL
I maintainer di solito rispondono entro 1 giorno
Nessuno ha ancora preso questa issue.
Valutazione
- Difficoltà
- 2/5
- Tempo stimato
- 1-3 ore
- Idoneità per principianti
- 82/100
- Tipo di issue
- Documentazione
- Chiarezza
- Specificata chiaramente
- Stato di attività
- Attiva
- Stack tecnologico
- postgresql
- Ambito
- databases, documentation
Direzione di ricerca
Leggi la sezione “Provision PostgreSQL” in docs/site/src/content/docs/operate/breg.mdx e confronta le indicazioni sul ruolo con verify_migration_role in crates/registry-breg/src/postgres/roles.rs. Aggiorna la sezione principale per specificare che il ruolo di migrazione non deve essere proprietario del database né disporre di CREATE al suo interno, e aggiungi il commento con le evidenze pertinente. Il lavoro è concluso quando i lettori della configurazione non spaziale possono vedere questo requisito e le autorizzazioni documentate del ruolo corrispondono all’applicazione della regola.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Problem
docs/site/src/content/docs/operate/breg.mdx, section "Provision PostgreSQL", never says that the migration role must not hold CREATE on the database, and must not own the database (an owner holds CREATE implicitly). The main block revokes database privileges from PUBLIC only (REVOKE ALL ON DATABASE registry FROM PUBLIC;); the only revoke that names the registry roles is REVOKE CREATE ON DATABASE registry FROM PUBLIC, registry_migration, registry_runtime; inside the spatial subsection, so a reader of a non-spatial project has no reason to check it. PostgreSQL does not grant database CREATE to PUBLIC by default, so the risk is an explicit grant or ownership the administrator's own tooling adds (for example CREATE DATABASE registry OWNER registry_migration, or a hosted provider's setup script).
Where
- Docs:
docs/site/src/content/docs/operate/breg.mdx, "Provision PostgreSQL" (lines 140 to 201 on origin/main; identical onjeremi/documents). - Enforcement:
crates/registry-breg/src/postgres/roles.rs,verify_migration_role(lines 401 to 431 on origin/main). It refuses whenhas_database_privilege(current_user, current_database(), 'CREATE')is true, as it does for SUPERUSER, BYPASSRLS, CREATEDB and CREATEROLE, withRoleInvariant("migration role has database-level administrative authority"). The same function then requires the migration role to own all five managed schemas (verify_schema_owner). - It runs on every apply connection (
interlock.rs,acquire_inner, line 286), in schema preparation forbregctl test(schema.rs), and in the maintenance commands.
What goes wrong
The refusal is correct and happens before maintenance, so nothing is written. But the operator is not told why:
bregctl applyandbregctl planreportapply.migration.failedwith "requires exact-target reconciliation" and suggested actionreconcile-failed-migration(see #1381), which sends them tomigration reconcilefor a database that was never touched.bregctl testmost likely reportstest.database.unavailable("recreate the disposable database"), becauseschema_preparation_errorincrates/registry-bregctl/src/test_lifecycle.rscollapses every otherStartupErrortoTestLifecycleError::Database. I did not trace theRoleInvarianttoStartupErrormapping for this exact case.
During the 2026-10-22 root-cause investigation, the repro databases gave the migration role CREATE on the database and lacked the five managed schemas; the documented setup passed with v0.43.0.
Proposed direction
In the main "Provision PostgreSQL" text (not only the spatial block):
- One sentence: the migration role must not own the database or hold CREATE on it; it owns only the five schemas, and
testandapplyrefuse a role with database-level authority. - Optionally add
REVOKE CREATE ON DATABASE registry FROM registry_migration, registry_runtime;to the main block, so the spatial block's revoke is not the only one. - Add
crates/registry-breg/src/postgres/roles.rs, verify_migration_roleto the Evidence comment.
Notes
- Confirmed in code: the CREATE refusal, its message, where it runs, and the docs text on origin/main.
- From the triage notes, not reproduced by me: the repro databases' exact grants.
- Inferred: the
bregctl testcode for this case. - The misleading apply code is #1381; this issue is docs only.
- Lingua principale
- Rust
- Stelle
- 2
- Fork
- 0
- Merge medio
- 9h 19m
- PR unite (30g)
- 275
Preparare l'ambiente
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di registrystack/registry-stack
-
test(breg): postgres_startup needs the tooling feature its required-features does not declareApertaarea:breg bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
registrystack/registry-stack#2307 ·
I maintainer di solito rispondono entro 1 giorno
-
area:docs documentation
Difficoltà 2/5 1-3 ore Idoneità per principianti 76/100
registrystack/registry-stack#2253 ·
I maintainer di solito rispondono entro 1 giorno
-
area:coordinator bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
registrystack/registry-stack#2252 ·
I maintainer di solito rispondono entro 1 giorno
-
area:release bug
Difficoltà 2/5 1-3 ore Idoneità per principianti 74/100
registrystack/registry-stack#2248 ·
I maintainer di solito rispondono entro 1 giorno
-
BReg docs: the WASM upgrade step points at a compatibility member that explain no longer emitsApertaarea:breg documentation
Difficoltà 1/5 1-3 ore Idoneità per principianti 88/100
registrystack/registry-stack#2233 ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di registrystack/registry-stack
Issue simili
-
good first issue help wanted r-feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 82/100
servo/rust-smallvec#792 ·
I maintainer di solito rispondono entro 1 giorno
-
A-Unicode C-bug P-low
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
rust-lang/rustfmt#7210 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 1/5 1-3 ore Idoneità per principianti 86/100
I maintainer di solito rispondono entro 1 giorno
-
area:sim good first issue kind:feature
Difficoltà 2/5 1-3 ore Idoneità per principianti 87/100
I maintainer di solito rispondono entro 1 giorno
-
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
bitcoindevkit/bdk#2432 ·
I maintainer di solito rispondono entro 3 giorni