Worum es geht
Ein Mandant ist ein Kunde, dessen Daten von den Daten anderer Kunden getrennt bleiben müssen. Wie streng CDMS trennt, legt die Betriebsart fest. Es gibt genau zwei:
SINGLE: eine Datenbank für alles. Es gibt keine Mandanten.MULTI: eine System-Datenbank für Daten der ganzen Installation und dazu eine eigene Datenbank je Mandant.
Die Betriebsart gilt für die ganze Installation, also für Datenbank und Dateiablage zugleich. Sie steht in der Umgebungsvariable CODAMAI_PERSISTENCE_TENANT_MODE.
Zwei Bilder
flowchart TB
subgraph S["SINGLE"]
direction TB
SA(["Anfrage"]) --> SDB[("Datenbank single<br/>System-, Mandanten- und Benutzer-Modelle")]
end
subgraph M["MULTI"]
direction TB
MA(["Anfrage von Mandant acme"]) --> SYS[("Datenbank system<br/>System-Modelle")]
MA --> T1[("Datenbank acme<br/>Mandanten- und Benutzer-Modelle")]
T2[("Datenbank globex<br/>Mandanten- und Benutzer-Modelle")]
end
In MULTI erreicht die Anfrage von acme nur zwei Datenbanken: die System-Datenbank, die alle teilen, und ihre eigene. Die Datenbank von globex kommt in ihrem Weg nicht vor. Welche Modelle wohin gehören, steht unter Modell-Ebenen.
Was sich unterscheidet
- eine Datenbank für alle Modelle
- der Mandant im Token wird ignoriert
- kein Mandantenwechsel, keine Prüfung, ob ein Mandant bedient wird
- Dateien ohne Mandanten-Verzeichnis
- Owner-Filter der Benutzer-Modelle wirkt trotzdem
- für Installationen mit genau einem Kunden, für Entwicklung und Test
- System-Datenbank plus eine Datenbank je Mandant
- jede Anfrage einer Person braucht einen Mandanten, sonst 403
- CIAS prüft bei jeder Anfrage, ob der Mandant bedient wird
- Mandantenwechsel per Header für berechtigte Personen
- Dateien in einem Verzeichnis je Mandant
- für Installationen mit mehreren Kunden
| Ebene des Modells | Betriebsart | Datenbank |
|---|---|---|
| System | SINGLE | die eine Datenbank |
| Mandant oder Benutzer | SINGLE | die eine Datenbank |
| System | MULTI | System-Datenbank |
| Mandant oder Benutzer | MULTI | Datenbank des Mandanten der Anfrage |
Die ganze Entscheidung, auch für die Fehlerfälle, steht unter Welche Datenbank? Das Persistenzziel.
Was SINGLE mit dem Mandanten im Token macht
Auch in SINGLE kann ein Token einen Mandanten tragen, etwa weil derselbe Keycloak mehrere Anwendungen bedient. CDMS wertet ihn dann gar nicht aus:
- CIAS ermittelt keinen Mandanten und fragt auch nicht nach, ob er bedient wird.
- Die Liste der erlaubten Mandanten bleibt leer. Ein Header
tenantkann deshalb nichts wechseln. - Alle Modelle landen in der einen Datenbank.
Die Trennung nach Personen hängt nicht an der Betriebsart: Der Owner-Filter der Benutzer-Modelle wirkt in SINGLE genauso wie in MULTI.
Einstellen
Wann: CODAMAI_PERSISTENCE_TENANT_MODE=SINGLE oder =MULTI
-
1CDMSliest die Betriebsart beim Start
-
2CDMSrichtet Datenbankzugriff, Dateiablage und die Mandantenprüfung von CIAS danach aus
Ergebnis: Die Anwendung startet.
Wann: Die Variable ist nicht gesetzt.
-
1CDMSfindet keine Betriebsart; einen Standardwert gibt es absichtlich nicht
-
2CDMSbricht den Start mit einer Fehlermeldung ab, die den Namen der Einstellung nennt
Ergebnis: Ein Standardwert würde still eine Trennung abschalten, die jemand erwartet hat, oder eine erfinden, die niemand bestellt hat.
Wann: Zusätzlich ist der alte Schlüssel CODAMAI_PERSISTENCE_DATABASE_MODE (früher CDMS_DATABASE_MODE) gesetzt.
-
1CDMSvergleicht den alten mit dem neuen Wert
-
2CDMSgleich → Warnung im Log, der alte Schlüssel soll entfernt werden
-
3CDMSverschieden → Start bricht ab, die Meldung nennt beide Werte
Ergebnis: Keiner der beiden Werte gewinnt still. Ein Widerspruch ist ein Konfigurationsfehler.
Fallen
Wie es weitergeht
- Woher der Mandant einer Anfrage kommt: Woher der Mandant einer Anfrage kommt
- Welche Datenbank eine Anfrage trifft: Welche Datenbank? Das Persistenzziel
- Wie die Datenbanken entstehen: Datenbanken, Pools, Migration
- Beide Module zusammen: SINGLE und MULTI über beide Module