80 lines
4.7 KiB
Markdown
80 lines
4.7 KiB
Markdown
# External function mapping schema repair
|
|
|
|
Access owns `access_external_function_role_assignments`. Some older databases
|
|
record the Access baseline (`4a5b6c7d8e9f`) without this table. The mapping list
|
|
and `/api/v1/admin/external-function-role-mappings/delta` then fail with an
|
|
undefined-table error. This is a schema/history mismatch, not a reason to change
|
|
user permissions or recreate tenant data.
|
|
|
|
Forward repair revision `d8f1b4e7a0c3` follows Access `c7e0a3d6f9b2` on the
|
|
release track and `b6d9f2a5c8e1` on the disposable-development track. The latter
|
|
also requires Core's existing scope-table rename `4f2a9c8e7b6d`; this is a Core
|
|
contract and does not require the optional Tenancy or Organizations modules.
|
|
|
|
Before applying deployment migrations, back up and verify the database backup.
|
|
Use the configured migration track and ordinary deployment migration workflow,
|
|
including its deployment-wide advisory lock. Inspect the pending revision plan
|
|
before any targeted repair. Never replay or stamp the baseline, initialize dev
|
|
data, reset the database, or switch migration tracks to bypass the error.
|
|
|
|
The development launcher can run pending migrations when its file watcher
|
|
reloads the backend. Prepare and test a migration outside the watched source
|
|
tree, and complete the backup/preflight before placing a new migration file in
|
|
that tree. Do not assume that waiting to invoke a migration command prevents a
|
|
running development instance from applying it automatically.
|
|
|
|
The repair:
|
|
|
|
- Creates the absent mapping table only, with its baseline columns, role/scope
|
|
cascade foreign keys, primary key, tenant/source/function/role uniqueness,
|
|
and four lookup indexes.
|
|
- Does nothing if the table already exists. It does not alter partial tables;
|
|
any other schema mismatch needs separate inspection.
|
|
- Never invents mappings or changes roles, memberships, permissions, or other
|
|
application records. An empty list means no mappings have been configured.
|
|
- Keeps the table and any stored mappings on downgrade, because the table
|
|
belongs to the baseline and removing it would delete authorization policy.
|
|
|
|
After migration, verify both mapping list endpoints return success for an
|
|
authorized user in the active tenant, and check the table's constraints and
|
|
indexes. Existing read scopes and tenant isolation remain enforced. A missing
|
|
table cannot reveal whether historical mappings were once removed: this repair
|
|
does not reconstruct lost policy; investigate backups if mappings were expected.
|
|
|
|
Regression coverage in `tests/test_external_function_mapping_migration.py`
|
|
recreates the observed missing-table failure in isolated databases on both
|
|
tracks. It checks the HTTP list/delta responses, repeated upgrades, no-op
|
|
upgrades with existing mappings, downgrade/re-upgrade preservation, unchanged
|
|
parent rows/permissions, constraints, denied unprivileged reads, and tenant
|
|
isolation.
|
|
|
|
## Deutsch
|
|
|
|
Bei älteren Datenbanken kann die Access-Basismigration als angewendet vermerkt
|
|
sein, obwohl `access_external_function_role_assignments` fehlt. Die Liste der
|
|
Funktions-Rollenzuordnungen und ihre Delta-API melden dann einen internen Fehler.
|
|
Dies ist ein Widerspruch zwischen Schema und Migrationsstand, kein Anlass zur
|
|
Erweiterung von Berechtigungen oder zum Neuerstellen von Mandantendaten.
|
|
|
|
Vor der regulären, vorwärtsgerichteten Migration `d8f1b4e7a0c3` eine überprüfte
|
|
Datenbanksicherung erstellen. Den konfigurierten Migrationstrack und den
|
|
regulären Bereitstellungsablauf mit installationsweiter Migrationssperre nutzen;
|
|
bei einer gezielten Reparatur zuvor die ausstehenden Revisionen prüfen.
|
|
Basismigrationen nicht erneut ausführen oder lediglich als angewendet markieren,
|
|
keine Entwicklungsdaten initialisieren und die Datenbank nicht zurücksetzen.
|
|
Der Entwicklungsstarter kann ausstehende Migrationen bereits beim automatischen
|
|
Neuladen des Backends anwenden. Neue Migrationsdateien deshalb außerhalb des
|
|
überwachten Quellbaums vorbereiten und testen; Sicherung und Vorprüfung vor dem
|
|
Kopieren in den überwachten Quellbaum abschließen. Das Warten mit einem manuellen
|
|
Migrationsaufruf verhindert die automatische Anwendung nicht.
|
|
|
|
Die Reparatur erstellt nur die fehlende Tabelle einschließlich Fremdschlüsseln,
|
|
Eindeutigkeitsbedingung und Indizes. Vorhandene Tabellen und Datensätze bleiben
|
|
unverändert; auch ein Downgrade entfernt keine Zuordnungsdaten. Teilweise
|
|
vorhandene Tabellen werden nicht umgebaut und erfordern eine gesonderte Prüfung.
|
|
Es entstehen keine automatischen Zuordnungen oder neuen Rechte. Anschließend
|
|
beide Listenendpunkte im aktiven Mandanten mit einer berechtigten Person prüfen.
|
|
Eine leere Liste bedeutet, dass keine Zuordnungen konfiguriert sind. Falls früher
|
|
Zuordnungen erwartet wurden, Sicherungen prüfen: Verlorene Berechtigungsregeln
|
|
lassen sich aus einer fehlenden Tabelle nicht rekonstruieren.
|