Zum Inhalt

DiveLogix360 – UC00-Datenbank-Iststand

Stand: 15.10.2026 15:41 Branch: main Status: Aktiv

Änderungshistorie anzeigen


Zweck: Reproduzierbarer Nachweis des tatsächlich ausgerollten UC00-Datenbankstands in der Entwicklungsumgebung.
Abgrenzung: Der Nachweis bestätigt weder eine Produktionsfreigabe noch die vollständige Backend-, Sicherheits- oder RLS-Testabdeckung.

1. Geprüfte Ausgangslage

Vor der Veränderung wurde die Entwicklungsdatenbank nur lesend inventarisiert. Der alte Stand enthielt:

  • 22 Anwendungstabellen ohne Prisma-Migrationshistorie;
  • keine Tenants, Benutzer, Vertragsdokumente oder sonstigen fachlichen beziehungsweise personenbezogenen Datensätze;
  • drei globale Benachrichtigungsvorlagen und vier Plan-Features als einzige Referenzdaten.

Die sieben Referenzdatensätze entsprachen bereits eingecheckten historischen Seed-Quellen. Weil keine zu erhaltenden Fach- oder Personendaten vorlagen, war ein kontrollierter Neuaufbau aus der freigegebenen Migrationsfolge vertretbar. Der Neuaufbau wurde erst nach dieser Prüfung mit prisma migrate reset --force ausgeführt.

2. Ausgerollte Migrationsfolge

Die Supabase-Entwicklungsdatenbank verwendet PostgreSQL 17.6. Folgende eingecheckte Migrationen wurden vollständig und ohne Rollback angewendet:

Reihenfolge Migration Inhalt
1 20260809145000_uc00_prisma_v4_initial Prisma-v4-Initialschema mit 35 Fachtabellen, Relationen, Indizes und Fremdschlüsseln
2 20260809151500_uc00_database_guardrails PostgreSQL-Constraints, drei UC00-Rollen, minimale Rechte, Kontextfunktionen sowie ENABLE und FORCE ROW LEVEL SECURITY
3 20260809165000_uc00_email_identity_guardrails Partieller globaler Eindeutigkeitsindex für gültige offene Einladungen; abgelaufene Einladungen werden vor der Indexerstellung statusgerecht überführt
4 20260809180000_uc00_contract_party_contact_fields Additive Vertragskontaktfelder contract_contact_name und contract_contact_email am Tenant
5 20261012231500_uc00_notification_log_invitation_link Einladungsverweis notification_log.invitation_token_id mit tenantgebundenem Fremdschlüssel, eindeutige Kombination id/tenant_id auf invitation_tokens, zwei Indizes und erweiterte Prüfregel (ADR-024)
6 20261014111600_uc00_revoke_login_direct_privileges Entzieht den Runtime-Logins dlx_login_platform und dlx_login_tenant alle direkten Rechte auf Tabellen und Sequenzen in public, auf Funktionen und das Schema app sowie das direkt vergebene USAGE auf public (ADR-012)

prisma migrate deploy hat die sechste Migration am 14.10.2026 angewendet; Datenbank und alle sechs eingecheckten Migrationen stimmen überein.

3. Basis-Seed

Der Basis-Seed wurde auf nicht personenbezogene, versionierte Referenzdaten begrenzt. Er erzeugt idempotent:

  • drei globale deutsche Benachrichtigungsvorlagen;
  • vier Plan-Features für den vorbereiteten Test-, Starter-, Professional- und Enterprise-Umfang.

Benutzer, Tenants, Passwörter, Einladungs-, Vertrags- oder Authentifizierungstoken werden nicht automatisch erzeugt. Fachliche Testdaten erhalten einen getrennten und kontrollierten Aufbau im Rahmen der vertikalen UC00-Implementierung.

4. Nachgewiesener Iststand

Merkmal Nachgewiesener Stand
Tabellen 36 einschliesslich _prisma_migrations; davon 35 Fachtabellen
Migrationshistorie 6 erfolgreich abgeschlossene Migrationen (sechste am 14.10.2026)
Nicht leere Tabellen und Datensätze 8 Tabellen mit 44 Datensätzen (Inventur über DIRECT_URL vom 14.10.2026)
UC00-Rollen dlx_migrator, dlx_app_tenant, dlx_app_platform
Row-Level Security (RLS, zeilenbasierte Zugriffskontrolle) Auf allen 35 Fachtabellen aktiviert und erzwungen
Automatische Verwaltungszuweisung Für die Migrationsverbindung mit ADMIN, aber ohne INHERIT und ohne SET; daher keine automatische Nutzung als Anwendungsrolle
Fach- oder Personendaten Keine Kunden- oder Produktivdaten; vorhanden sind das Entwicklungskonto des Superadmins mit Sitzungen und Anmeldeprotokoll
Rechte der Runtime-Logins Keine direkten Rechte; Zugriff nur über SET LOCAL ROLE in die Anwendungsrolle (DB-RLS-B09, CTX-00)

PostgreSQL 17 verwaltet ADMIN, INHERIT und SET bei Rollenzuweisungen getrennt. Die sichere Ausgangskonfiguration wurde vor und nach der Laufzeitprüfung exakt verglichen. Grundlagen: PostgreSQL-Rollenattribute, SET ROLE und REVOKE.

5. Grundlegende RLS-Laufzeitprüfung

Das Prüfskript backend/scripts/test-uc00-database-guards.mjs führt neun Datenbankschutzprüfungen aus. Der letzte erfolgreiche Gesamtlauf erfolgte am 14.10.2026 nach der sechsten Migration:

ID Prüfung Ergebnis
DB-RLS-B01 SET-Berechtigung nur innerhalb des Tests und vollständige Wiederherstellung Erfolgreich
DB-RLS-B02 Standardverweigerung der Tenant-Rolle ohne Tenant-Kontext Erfolgreich
DB-RLS-B03 Tenant A kann Tenant B nicht lesen Erfolgreich
DB-RLS-B04 Tenantgebundene Schreib- und Leseoperation für das eigene Profil Erfolgreich
DB-RLS-B05 Kontextwechsel blendet Daten des vorherigen Tenants vollständig aus Erfolgreich
DB-RLS-B06 Globale Benachrichtigungsvorlagen sind tenantseitig lesbar Erfolgreich
DB-RLS-B07 Getrennte Plattformrolle besitzt die vorgesehene tenantübergreifende Sicht Erfolgreich
DB-RLS-B08 Dieselbe normalisierte E-Mail kann tenantübergreifend nur eine offene Einladung besitzen; widerrufene Historie bleibt zulässig Erfolgreich
DB-RLS-B09 Die Runtime-Logins besitzen keine direkten Rechte auf Tabellen, Sequenzen, Funktionen oder das Schema app Erfolgreich (seit 14.10.2026)

Alle temporären Testdaten und Rollenerweiterungen liegen in einer absichtlich zurückgerollten Transaktion. Eine anschliessende Inventur bestätigte damals wieder genau zehn Datensätze sowie die unveränderten sicheren Rollenoptionen. Nach Anwendung der vierten additiven Migration bestätigen prisma migrate status und die Inventur den aktuellen Datenbankstand mit elf Datensätzen. Der erneute Schutzprüfungslauf scheiterte damals an der nicht erreichbaren Runtime-Verbindung. Seit DATABASE_URL auf den Laufzeitzugang dlx_login_platform zeigt, der nur einer der beiden App-Rollen angehört, muss das Skript mit dem Migrationszugang aus DIRECT_URL ausgeführt werden (Abschnitt 6). So ausgeführt, waren am 13.10.2026 alle acht Prüfungen erfolgreich.

5.1 Kontextprüfung der Runtime-Logins (14.10.2026)

Inventur im SQL-Editor vom 14.10.2026:

Anwendungsrolle Login Erbt Rechte (INHERIT) Darf wechseln (SET)
dlx_app_platform dlx_login_platform Nein Ja
dlx_app_tenant dlx_login_tenant Nein Ja

Inventur vor Paket 4: Beide Logins besassen direkte Rechte (SELECT, INSERT, UPDATE, DELETE) auf allen 36 Tabellen in public, vergeben von postgres, ausserdem ein direktes USAGE auf die Schemas public und app; dlx_login_tenant durfte zusätzlich fünf Funktionen in app ausführen. Standardrechte für künftige Tabellen bestanden nicht. Einzige Tabelle ohne RLS war _prisma_migrations; dort hätten die Logins ohne Kontext den Migrationsverlauf lesen, ändern und löschen können. Die sechste Migration hat diese Rechte am 14.10.2026 entzogen.

Das Prüfskript backend/scripts/test-uc00-context-runtime.ts (npm run context:check) ergab am 14.10.2026 (CTX-07 seit Paket 2, CTX-08 seit Paket 3):

ID Prüfung Ergebnis
CTX-00 Direkter Zugriff des Logins dlx_login_platform ohne Kontextwrapper Vor Paket 4 (Information): rolbypassrls = false, sieht 0 von 1 Benutzer. Seit Paket 4 geprüft: abgewiesen (permission denied)
CTX-01 Tenant-Kontext eines unbekannten Tenants sieht keine Benutzer Erfolgreich
CTX-02 invitation_tokens ist im Tenant-Kontext gesperrt Erfolgreich (permission denied)
CTX-03 refresh_tokens ist im Tenant-Kontext gesperrt Erfolgreich (permission denied)
CTX-04 Plattform-Kontext liest Einladungen und Sitzungen Erfolgreich
CTX-05 Tenant-Kontext sieht genau die eigenen Benutzer Ohne Aussagekraft: kein Tenant mit Benutzern vorhanden
CTX-06 UsersService.findAll eines Tenant-Admins Übersprungen: kein aktiver Tenant-Admin vorhanden
CTX-07 tenant_profiles, tenant_onboardings und onboarding_steps bleiben für einen fremden Tenant leer (Paket 2) Ohne Aussagekraft: in diesen Tabellen sind noch keine Daten vorhanden
CTX-08 TenantsService.findAll liefert dieselbe Anzahl wie eine Zählung im Plattform-Kontext (Paket 3) Ohne Aussagekraft: noch keine Tenants vorhanden

Vor Paket 4 sah ein Lesezugriff ohne Kontextwrapper in den 35 Fachtabellen keine Zeilen (Inventur mit dem Laufzeit-Login vom 14.10.2026: nur _prisma_migrations sichtbar). Seit Paket 4 wird jeder Zugriff ohne Kontext abgewiesen. Die Tenant-Isolation auf Datenbankebene belegen DB-RLS-B03 bis B05. Den positiven Nachweis über die Anwendungsdienste erbringt die Isolationsprüfung in Abschnitt 5.2.

Das Anmeldeprotokoll (auth_log) wurde vor der Umstellung auf den Plattform-Kontext nie geschrieben: Am 14.10.2026 enthielt die Tabelle genau einen Eintrag, die erste Anmeldung nach der Umstellung (login_success), obwohl zuvor mehrere Anmeldungen stattgefunden hatten. Seit der Umstellung wird das Protokoll geschrieben.

5.2 Isolationsprüfung mit kontrollierten Testdaten (14.10.2026)

Das Prüfskript backend/scripts/test-uc00-isolation.ts (npm run isolation:check) legt pro Lauf über den Migrationszugang zwei Test-Tenants mit je einem Tenant-Admin, einem Mitarbeiter und einer offenen Einladung an (Präfix «DLX-ISO-TEST», Adressen unter example.test, nicht anmeldefähig). Geprüft wird über die echten Dienste mit den Runtime-Logins; danach werden alle Testdaten entfernt. Für ISO-08 wird kurzzeitig ein vollständiges Testprofil für Tenant A angelegt; der Einladungsversand ist während der Prüfung durch eine leere Funktion ersetzt, es wird keine E-Mail versendet.

ID Prüfung Ergebnis
ISO-01 Benutzerliste von Admin A enthält nur Benutzer von Tenant A Erfolgreich
ISO-02 Benutzer von Tenant B ist für Admin A nicht sichtbar (404) Erfolgreich
ISO-03 Statusänderung an einem Benutzer von B wird abgewiesen (404); der Benutzer bleibt unverändert Erfolgreich
ISO-04 Einladungsliste von Admin A enthält nur die Einladung von Tenant A Erfolgreich
ISO-05 Onboarding-Status von A berührt das Onboarding von B nicht Erfolgreich
ISO-06 Superadmin sieht in der Tenant-Liste beide Test-Tenants Erfolgreich
ISO-07 Einladung durch Admin A ohne vollständiges Schulprofil wird mit 409 school_profile_incomplete abgewiesen; es entsteht keine Einladung (G6, T13) Erfolgreich
ISO-08 Nach Erfassung eines vollständigen Schulprofils wird die Einladung zugelassen (pending) Erfolgreich
ISO-99 Testdaten nach dem Lauf vollständig entfernt Erfolgreich

Aussagegrenze: Die Dienste schränken ihre Abfragen zusätzlich selbst auf den eigenen Tenant ein. ISO-01 bis ISO-04 belegen das korrekte Zusammenspiel von Diensten, Kontextwrapper und RLS, nicht die Wirkung von RLS allein; diese belegen DB-RLS-B03 bis B05 und CTX-01.

6. Reproduzierbare Prüfungen

Die folgenden Befehle wurden im Verzeichnis backend für den aktuellen Stand erfolgreich ausgeführt:

npm.cmd run prisma:migrate:status
npm.cmd run prisma:migrations:validate
npm.cmd exec -- prisma validate
npm.cmd run prisma:seed
npm.cmd run prisma:inventory -- --summary

Die Datenbankschutzprüfungen benötigen den Migrationszugang, weil sie vorübergehend Rollenoptionen setzen und wiederherstellen. npm run prisma:guards:test verwendet DATABASE_URL und bricht deshalb mit dem Laufzeitzugang mit «Beide UC00-Rollen muessen vorliegen» ab. Ausgeführt wird die Prüfung ohne Änderung der .env mit:

node -e "require('dotenv').config(); process.env.DATABASE_URL = process.env.DIRECT_URL; import('./scripts/test-uc00-database-guards.mjs');"

Letzter erfolgreicher Lauf: 14.10.2026 nach der sechsten Migration, neun von neun Prüfungen. Basis-Seed (npm run prisma:seed), Inventur (npm run prisma:inventory) und prisma/seed-dev-superadmin.ts verbinden sich seit Paket 4 selbst über DIRECT_URL.

Die Kontextprüfung der Runtime-Logins läuft mit den Laufzeitzugängen aus der .env und ändert keine Daten:

npm run context:check

Die Isolationsprüfung (Abschnitt 5.2) legt kurzzeitig Testdaten an und entfernt sie wieder:

npm run isolation:check

Der Backend-Build ist davon getrennt zu bewerten. Nach erneuter Prisma-Client-Erzeugung ist er zuletzt am 14.10.2026 mit 149 Unit-Tests in 16 Testdateien erfolgreich. Dies ändert den hier nachgewiesenen Datenbank-Iststand nicht.

7. Verbleibende Grenzen

Der Entwicklungsdatenbank-Rollout und die grundlegende RLS-Wirksamkeit sind nachgewiesen. Weiterhin offen bleiben insbesondere:

  • vollständige Laufzeitnachweise für die provisionierten, nicht administrativen Login-Rollen dlx_login_platform und dlx_login_tenant; ihre Rollenzuweisungen sind per Inventur vom 12.10.2026 bestätigt und der Auth-Flow T-01 bis T-11 ist mit ihnen manuell nachgewiesen;
  • Umstellung aller betroffenen Backend-Dienste auf die implementierten Prisma-Runtime-Clients und den transaktionsgebundenen Tenant-, Benutzer- und Request-Kontext;
  • vollständige Rollen-, Ressourcen-, Negativ-, Schreib-, Lösch- und Connection-Pooling-Tests;
  • Laufzeitprüfungen für alle Fachtabellen und sicherheitsrelevanten Constraints;
  • Integrationsprüfung der ausgerollten Vertragskontaktfelder im vollständigen Vertragsablauf;
  • vollständige Backend-Umstellung auf das Prisma-v4-Zielschema;
  • produktive Provisionierung, Härtung, Überwachung und Rechteprüfung.

Die acht Basisprüfungen sind daher ein belastbarer Zwischenbeleg, aber kein Ersatz für die vollständigen Testkriterien UC00-09-03 und UC00-09-23.

Änderungshistorie

Datum, Uhrzeit Version Änderung Autor
15.10.2026 15:41 1.19 2 Verweise auf Kriterien der UC00-Abschlusscheckliste direkt verlinkt Claude
14.10.2026 13:59 1.18 Abschnitt 5.2 um ISO-07 und ISO-08 (Einladung erst nach vollständigem Schulprofil, G6/T13) ergänzt; 149 Unit-Tests in 16 Testdateien Claude
14.10.2026 13:42 1.17 Abschnitt 5.2 Isolationsprüfung mit kontrollierten Testdaten (ISO-01 bis ISO-06, ISO-99) vom 14.10.2026 ergänzt Claude
14.10.2026 13:32 1.16 Sechste Migration (Entzug der direkten Login-Rechte), DB-RLS-B09, CTX-00 als Prüfung, Inventur vor und nach Paket 4 sowie Iststand vom 14.10.2026 nachgeführt Claude
14.10.2026 13:06 1.15 Einträge der Änderungshistorie vom 14.10.2026 an die richtige Stelle verschoben und fehlerhafte Zeitangaben korrigiert; inhaltlich unverändert Claude
14.10.2026 13:03 1.14 CTX-08 (Paket 3) und geprüfter Schreibzugriff auf auth_log ergänzt; teststand nachgeführt: 139 Unit-Tests in 15 Testdateien erfolgreich (14.10.2026) Claude
14.10.2026 12:40 1.13 Kontextprüfung um CTX-07 (Onboarding-Tabellen, Paket 2) ergänzt; teststand nachgeführt: 90 Unit-Tests in 15 Testdateien erfolgreich (14.10.2026) Claude
14.10.2026 12:15 1.12 Abschnitt 5.1 Kontextprüfung der Runtime-Logins ergänzt (Rollenzuweisungen, direkte Tabellenrechte, CTX-00 bis CTX-06); Schutzprüfung vom 14.10.2026 und teststand nachgeführt: 81 Unit-Tests in 14 Testdateien erfolgreich (14.10.2026) Claude
14.10.2026 10:14 1.11 Teststand nachgeführt: 71 Unit-Tests in 12 Testdateien und OpenAPI-Prüfung mit 35 Operationen und 67 Testfällen erfolgreich (14.10.2026) Claude
14.10.2026 08:10 1.10 Teststand nachgeführt: 59 Unit-Tests in 11 Testdateien erfolgreich (14.10.2026) Claude
13.10.2026 14:20 1.9 Teststand nachgeführt: 43 Unit-Tests in 9 Testdateien und OpenAPI-Prüfung mit 63 Testfällen erfolgreich (13.10.2026) Claude
13.10.2026 00:38 1.8 Verbleibende Grenzen bereinigt: Login-Rollen sind provisioniert und per Inventur bestätigt; offen bleiben vollständige Laufzeitnachweise Claude
13.10.2026 00:34 1.7 Fünfte Migration (ADR-024) und erfolgreiche Wiederholung der acht Datenbankschutzprüfungen vom 13.10.2026 nachgeführt; Ausführung mit DIRECT_URL dokumentiert Claude
12.10.2026 09:58 1.6 Änderungshistorie ans Dokumentende verschoben und Sprunglink «Änderungshistorie anzeigen» unter dem Kopf ergänzt (einheitlicher Dokumentaufbau gemäss AGENTS.md) Claude
12.10.2026 09:08 1.5 Explizite Sprungmarke für Abschnitt 5 ergänzt, damit der Verweis der Abschlusscheckliste auch in MkDocs funktioniert Claude
10.08.2026 20:00 1.4 Sicheren UC00-Merge-Stand nach main übernommen und Branch-Nachführung ergänzt Codex
10.08.2026 19:46 1.3 Erfolgreichen Backend-Build sowie kontrollierten Rollout und Inventarnachweis der vierten Migration nachgeführt Codex
09.08.2026 17:32 1.2 E-Mail-Schutzmigration ausgerollt, Datenbankinventur aktualisiert und globale Einladungsadresse als achte Laufzeitprüfung nachgewiesen Codex
09.08.2026 16:40 1.1 Getrennte Prisma-Runtime-Clients und Kontextwrapper als implementierten, noch nicht provisionierten Anwendungspfad abgegrenzt Codex
09.08.2026 16:25 1.0 Kontrollierten Neuaufbau der Entwicklungsdatenbank, Basis-Seed und grundlegende RLS-Laufzeitprüfung dokumentiert Codex