---
legal_status: draft_pending_lawyer_review
last_updated: 2026-04-24
subject: 杭州阿空智能科技有限公司
---

# xiangqin 数据生命周期

> **⚠️ 草稿状态**：本文档为 AI 起草初稿，尚未经律师 review，不代表当前正式生效条款。

本文档明确 xiangqin 各类数据的**保留期、删除时机、导出流程、注销流程**。对应 PIPL 第 47 条 + 第 45 条用户权利。

## 1. 数据分类 + 保留期总表

| 数据类型 | 位置 | 保留期 | 到期动作 |
|---|---|---|---|
| 手机号 hash（HMAC-SHA256） | SQLite `users.phone_hash` | 账号存续 + 3 年 | 3 年后覆盖为 "DELETED" 占位（保留唯一约束避免复注） |
| 身份证号 hash（HMAC-SHA256） | SQLite `users.cert_id_hash` | 账号存续 + 3 年 | 同上 |
| 真实姓名 | 不存储（仅核验瞬间持有） | 立即销毁 | N/A |
| 个人资料（年龄 / 城市 / 简介等） | SQLite `users.*` 公开字段 | 账号存续 | 注销后 30 天删除 |
| 用户上传照片 | 阿里云 OSS | 账号存续 | 注销后 30 天删除 |
| 信件内容 | SQLite `mails.*` | **30 天 TTL** | 到期 cron job 物理删除 |
| 支付订单 | SQLite `orders.*` | **5 年**（会计法） | 5 年后脱敏归档到 OSS（金额+订单号+日期，去除关联用户 ID） |
| 日志（/var/log） | epsilon 本地 | **7 天滚动** | `logrotate` daily，保留 7 份 |
| 审计日志（admin 操作） | SQLite `audit.*` | **6 个月** | cron job 月末清理过期 |
| 备份（全量 DB） | 阿里云 OSS | **30 天** | OSS lifecycle rule 自动删除 |
| agent_gateway_url / hooks_token（如有） | SQLite `users.*` | 账号存续 | 注销立即删除 |

## 2. 账号注销流程

### 2.1 用户发起

```bash
xq unregister
# 或
xq unregister --confirm  # 跳过交互确认
```

或邮件申请：yarnb@qq.com，提供**手机号** + 简短陈述理由。

### 2.2 服务端处理步骤

1. **验证身份**：要求用户输入当前 session token + 手机号（防他人冒名注销）
2. **显示影响清单**（交互式）：
   ```
   注销后：
   - 您的个人资料立即下线（其他用户不再搜到您）
   - 您收到的未读信件仍对发件方显示为"已送达"，但您将无法读取
   - 您已购买的未使用信封 **不退款**（视为放弃）
   - 30 天冷静期内您可邮件申请撤回注销，30 天后数据永久删除
   ```
3. **标记注销** `users.unregistered_at = now()`
4. **立即隐藏**：其他用户搜索 / 查询时不再返回该账号
5. **禁用所有写操作**：该账号不能登录 / 发信 / 改资料 / 购买

### 2.3 30 天冷静期

- 账号标记注销**后 30 天内**，用户可发邮件 yarnb@qq.com 申请恢复
- 恢复成功率：资料还在（未被 30 天后的清理 cron 删除），可完整恢复
- 冷静期过后不可恢复

### 2.4 30 天后永久删除

cron job 每天扫描 `unregistered_at < now() - 30 days` 的用户，执行：

```sql
-- 资料全部删除
DELETE FROM profiles WHERE user_id = ?;
DELETE FROM photos WHERE user_id = ?;
DELETE FROM mails WHERE sender_id = ? OR receiver_id = ?;

-- users 表保留但字段清空（保留 phone_hash / cert_id_hash 做唯一约束防复注）
UPDATE users SET
  nickname = NULL, bio = NULL, age = NULL, city = NULL, ...,
  phone_hash = 'DELETED:' || id,   -- 破坏原哈希，保留唯一性
  cert_id_hash = 'DELETED:' || id
WHERE user_id = ?;
```

- 唯一例外：**支付订单（orders）** 保留 5 年（会计法），但 `user_id` 替换为 NULL，金额 / 订单号 / 支付时间保留供税务审计

## 3. 数据导出（可携带权 / PIPL §45）

用户可获取自己的全部数据副本：

```bash
xq profile export > my-xiangqin-data.json
```

导出 JSON 包含：
- 个人资料完整字段
- 历史信件记录（仅未超 30 天 TTL 的）
- 支付订单记录
- **不包含**：其他用户发给您的信件的原文（仅保留您是否读过的元数据，原文以您阅读时的快照保留）

若 CLI 命令暂未实现，可发邮件 yarnb@qq.com 申请，**3 个工作日内**我们邮件发送 JSON。

## 4. 发生数据泄露时的通告

若发生安全事件（数据被未授权访问 / 泄露）：

- **72 小时内**：
  - 本文档站公告说明影响范围
  - 邮件 / 短信通知所有受影响用户
  - 上报监管机关（网信办 / 当地公安网安）
- **14 天内**：
  - 发布事故分析报告 + 补救措施
  - 个人可通过 yarnb@qq.com 查询自己的受影响状态

## 5. 第三方服务的数据生命周期

我们调用的第三方服务各自的数据处理由其自身政策约束，但我们选型上已确认：

| 第三方 | 数据类型 | 在第三方的保留期（截至 2026-04 核实） |
|---|---|---|
| 阿里云 Cloudauth | 实名核验日志 | 6 个月 |
| 阿里云短信 | 短信发送记录 | 6 个月 |
| 支付宝 | 订单记录 | 按银行业规定 10 年+ |
| 阿里云 OSS（照片） | 我们的 OSS 桶内容 | 由我们控制（用户注销 30 天后删除） |

## 6. 企业内部访问控制（数据最小可见原则）

只有以下角色能在内部访问用户数据，且访问被审计：

| 角色 | 访问范围 | 审计 |
|---|---|---|
| **Admin（老板本人）** | 全部数据（运维必要） | 所有 admin CLI 操作写 audit log |
| **Moderator** | 被举报账号的公开资料 + 涉案信件（非全部） | audit log |
| **普通员工 / 合作伙伴** | ❌ **没有** | N/A |
| **我（Claude，作为 AI 助手）** | 仅对 vault 中明确声明的 credential 有访问，**不访问生产 DB 用户数据** | N/A |

## 7. 本文档变更

- 重大变更（保留期调整 / 新增数据类型 / 第三方）：提前 14 天文档站公告
- 非重大变更：发布即生效

---

**本文档最后更新**：2026-04-24
**文档状态**：草稿（待律师 review）
