72 lines
2.8 KiB
SQL
72 lines
2.8 KiB
SQL
-- 账号表:存储 2FA 凭据
|
|
CREATE TABLE IF NOT EXISTS vault (
|
|
id TEXT PRIMARY KEY,
|
|
service TEXT NOT NULL,
|
|
account TEXT NOT NULL,
|
|
category TEXT,
|
|
secret TEXT NOT NULL, -- 加密存储 {encrypted, iv, salt}
|
|
digits INTEGER DEFAULT 6,
|
|
period INTEGER DEFAULT 30,
|
|
algorithm TEXT DEFAULT 'SHA1',
|
|
created_at INTEGER,
|
|
created_by TEXT,
|
|
updated_at INTEGER,
|
|
updated_by TEXT
|
|
);
|
|
|
|
-- 云端备份源配置表
|
|
CREATE TABLE IF NOT EXISTS backup_providers (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
type TEXT NOT NULL, -- 类型: 'webdav', 's3', 'telegram'
|
|
name TEXT NOT NULL, -- 显示名称
|
|
is_enabled BOOLEAN DEFAULT 1, -- 启用状态
|
|
config TEXT NOT NULL, -- 配置 JSON (敏感字段加密)
|
|
auto_backup BOOLEAN DEFAULT 0, -- 自动备份开关
|
|
auto_backup_password TEXT, -- 自动备份加密密码 (加密存储)
|
|
auto_backup_retain INTEGER DEFAULT 30, -- 自动备份保留份数,0为无限
|
|
last_backup_at INTEGER, -- 最后备份时间戳
|
|
last_backup_status TEXT, -- 状态: 'success' | 'failed'
|
|
created_at INTEGER,
|
|
updated_at INTEGER
|
|
);
|
|
|
|
-- Telegram 备份历史记录表
|
|
CREATE TABLE IF NOT EXISTS backup_telegram_history (
|
|
id INTEGER PRIMARY KEY AUTOINCREMENT,
|
|
provider_id INTEGER NOT NULL,
|
|
filename TEXT NOT NULL,
|
|
file_id TEXT NOT NULL,
|
|
message_id INTEGER NOT NULL,
|
|
size INTEGER NOT NULL,
|
|
created_at INTEGER NOT NULL
|
|
);
|
|
|
|
-- Passkey 凭证表
|
|
CREATE TABLE IF NOT EXISTS auth_passkeys (
|
|
credential_id TEXT PRIMARY KEY, -- 凭证唯一标识
|
|
user_id TEXT NOT NULL, -- 关联用户标识 (Email)
|
|
public_key BLOB NOT NULL, -- 导出的公钥
|
|
counter INTEGER DEFAULT 0, -- 签名计数器
|
|
name TEXT, -- 硬件名称/别名
|
|
transports TEXT, -- 允许的传输方式 (JSON array)
|
|
created_at INTEGER NOT NULL,
|
|
last_used_at INTEGER
|
|
);
|
|
|
|
-- 索引
|
|
DROP INDEX IF EXISTS idx_vault_service;
|
|
CREATE INDEX IF NOT EXISTS idx_vault_created_at ON vault(created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_backup_providers_type ON backup_providers(type);
|
|
CREATE INDEX IF NOT EXISTS idx_vault_service_created_at ON vault(service, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_backup_telegram_history_provider_id ON backup_telegram_history(provider_id, created_at DESC);
|
|
CREATE INDEX IF NOT EXISTS idx_passkeys_user_id ON auth_passkeys(user_id);
|
|
|
|
-- Remove any existing duplicates before enforcing unique constraint; keep the earliest
|
|
DELETE FROM vault
|
|
WHERE rowid NOT IN (
|
|
SELECT MIN(rowid)
|
|
FROM vault
|
|
GROUP BY lower(service), lower(account)
|
|
);
|
|
|
|
CREATE UNIQUE INDEX IF NOT EXISTS vault_service_account_uq ON vault(lower(service), lower(account)); |