-- App-Passwörter: widerrufbare Zugangsdaten für WebDAV-/Sync-Clients, damit das -- Hauptpasswort nicht auf Geräten liegt, die man verlieren kann. CREATE TABLE app_passwords ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, name TEXT NOT NULL, -- SHA-256 des Tokens. Kein Argon2: das Token ist serverseitig zufällig und -- hochentropisch, also nicht ratbar – und WebDAV authentifiziert jeden -- einzelnen Request, wo Argon2 pro Aufruf zu teuer wäre. token_hash TEXT NOT NULL UNIQUE, last_used_at TIMESTAMPTZ, created_at TIMESTAMPTZ NOT NULL DEFAULT now() ); CREATE INDEX idx_app_passwords_user ON app_passwords(user_id);