-- 000016: 管理员两步验证 (2FA / TOTP) -- 为 users 增加 TOTP 密钥与开关;新增一次性备份码表(仅存哈希)。 ALTER TABLE users ADD COLUMN IF NOT EXISTS totp_secret TEXT; ALTER TABLE users ADD COLUMN IF NOT EXISTS totp_enabled BOOLEAN NOT NULL DEFAULT false; CREATE TABLE IF NOT EXISTS user_backup_codes ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), user_id UUID NOT NULL REFERENCES users(id) ON DELETE CASCADE, code_hash TEXT NOT NULL, -- bcrypt 哈希,绝不存明文 used_at TIMESTAMPTZ, -- 非空表示已使用(一次性) created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_user_backup_codes_user ON user_backup_codes(user_id);