feat(datenbank): Datenmodell mit Datenbankregeln und Seed (#003)

Alle Modelle fuer die fuenf Phasen in einer Migration, damit spaetere
Phasen keine Umbauten an Kerntabellen brauchen. Was auch an der
Service-Schicht vorbei gelten muss, steht als CHECK, partieller Index
oder Trigger in der Datenbank: Personen-Keys ohne Private Key, genau
ein Instanz-Deployment-Key, ein vertrauter Host-Key je Algorithmus,
shell-sichere Zielbenutzer und Pfade.

Das Protokoll ist append-only und per Hash-Kette verbunden; den Hash
berechnet ein Trigger, damit keine Zeile ohne Verkettung entstehen
kann (#005 baut darauf auf).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-12 09:12:06 +02:00
co-authored by Claude Opus 5.5
parent 224386106b
commit 03c7c45576
15 changed files with 1480 additions and 13 deletions
+22
View File
@@ -0,0 +1,22 @@
import { hash, verify } from "@node-rs/argon2";
/**
* Passwort-Hashing fuer den Notfall-Admin (#004): argon2id mit den OWASP-Empfehlungen
* (19 MiB, 2 Durchlaeufe, 1 Thread).
*/
const PARAMETER = { memoryCost: 19456, timeCost: 2, parallelism: 1 } as const;
export const PASSWORT_MINDESTLAENGE = 16;
export async function passwortHashen(passwort: string): Promise<string> {
return hash(passwort, PARAMETER);
}
/** Wirft nie – ein kaputter Hash ist schlicht „falsch“. */
export async function passwortPruefen(hashWert: string, passwort: string): Promise<boolean> {
try {
return await verify(hashWert, passwort);
} catch {
return false;
}
}