# 苏州教育E卡通数据安全运维操作手册

## 前言

本手册基于苏州教育E卡通平台的实际运维需求，旨在建立一套**实用、可操作**的数据安全管控体系。我们不追求理论上的"完美"安全方案，而是聚焦于解决实际工作中真正存在的风险问题。

**核心原则：好钢用在刀刃上** - 把最严格的管控措施用在最高风险的操作上，对一般性操作保持必要的灵活性，确保安全不影响正常工作效率。

本手册适用于所有参与平台运维、管理的人员，包括但不限于系统管理员、客服人员、学校管理人员等。

---

## 一、操作风险分级体系

基于等保三级要求以及操作的影响范围和不可逆性，将所有操作分为五级：

### 1.1 一级操作（等保三级"重要管理操作"）

**等保三级依据**：根据《信息安全技术网络安全等级保护基本要求》（GB/T 22239-2019），重要管理操作必须采用严格的身份鉴别和访问控制措施。

**识别标准**：
- 一级特殊敏感数据修改（身份证号、姓名、学籍号等）
- 系统核心配置修改
- 安全策略变更
- 审计规则修改
- 用户权限分配

**等保三级要求**：
- **强制双因素认证**：密码+动态令牌/生物特征
- **全程录屏记录**：操作过程不可中断记录
- **双人现场操作**：一人操作，一人监督
- **完整操作链路**：申请→审核→复核→终审→执行→确认
- **审计日志完整性**：防篡改技术保护

### 1.2 二级操作（重要数据修改）

**特殊敏感数据定义**：

**一级特殊敏感数据**：
- 学生身份证号
- 学生姓名（涉及法律身份）
- 学籍号（教育部门统一编号）
- 户籍信息
- 残疾、贫困等特殊身份标记

**二级特殊敏感数据**：
- 家庭详细住址
- 监护人联系方式
- 学生照片
- 转学、休学等学籍状态变更
- 奖惩记录

**管控要求**：
- **二级操作**采用三阶段流程：申请→审核→执行
- **强制双因素认证**：密码+短信验证码
- **双人确认机制**：主管线上审批
- **操作日志记录**：修改前后值对比
- **数据自动备份**：执行前备份，可回滚

### 1.3 三级操作（一般权限操作）

**等保三级依据**：等保三级要求对用户身份鉴别和访问控制进行分级管理。

**识别标准**：
- 二级特殊敏感数据修改
- 新生录入和注册
- 账号创建和权限分配（非管理员）
- 补换卡订单处理
- 一般配置修改

**等保三级要求**：
- **双因素认证**：重要操作需要额外认证
- **审批流程**：主管审批或自动审批
- **操作记录**：完整的操作链路记录
- **权限最小化**：基于角色的精确控制

**管控要求**：
- **三级操作**采用两阶段流程：申请→审批→执行
- **会话超时控制**：30分钟无操作自动重新认证
- **操作确认机制**：重要操作需要二次确认
- **详细操作日志**：记录操作时间、IP、内容

### 1.4 四级操作（数据查询）

**等保三级依据**：等保三级要求对数据访问进行严格控制，防止未授权访问。

**识别标准**：
- 学生信息查询
- 报表生成和统计
- 系统状态查看
- 操作日志查询（授权人员）

**等保三级要求**：
- **访问控制**：基于角色的数据访问限制
- **查询审计**：所有查询操作记录
- **结果限制**：单次查询返回记录数限制
- **异常监控**：异常查询模式自动告警

**管控要求**：
- **四级操作**采用单阶段记录
- **数据脱敏显示**：敏感信息部分隐藏
- **查询频率限制**：防止批量数据爬取
- **查询原因记录**：重要查询需要说明原因

### 1.5 五级操作（只读查看）

**等保三级依据**：等保三级要求对系统访问进行监控和审计。

**识别标准**：
- 公开信息查看
- 系统帮助文档
- 个人信息修改（非特殊数据）
- 基础报表查看

**等保三级要求**：
- **基本认证**：用户名密码认证
- **会话管理**：会话超时和安全退出
- **访问记录**：基础访问日志记录

**管控要求**：
- **五级操作**最宽松的管控
- **基础日志记录**：登录时间、访问页面
- **密码策略**：定期更换强制要求

---

## 二、等保三级身份鉴别措施

### 2.1 双因素认证应用场景

**一级操作（必须使用双因素认证）**：
- 一级特殊敏感数据修改
- 系统核心配置修改
- 安全策略变更
- 用户权限分配
- 审计规则修改

**二级操作（重要操作时启用双因素认证）**：
- 二级特殊敏感数据修改
- 重要权限变更
- 批量数据处理（≥10条）

**认证方式**：
```
双因素认证组合：
方式一：密码 + 短信验证码
方式二：密码 + 动态令牌（TOTP）
方式三：密码 + 人脸识别
方式四：数字证书 + 密码
```

### 2.2 会话管理要求

**会话超时控制**：
- 一级操作：15分钟无操作强制重新认证
- 二级操作：30分钟无操作强制重新认证
- 三级操作：60分钟无操作强制重新认证
- 四、五级操作：120分钟无操作自动退出

**等保三级合规要求**：
- 远程登录必须加密传输
- 会话ID随机生成，不可预测
- 多次失败后锁定账号
- 异地登录需要额外验证

### 2.3 密码策略

**密码复杂度要求**：
- 最小长度：10位
- 包含字符类型：大写字母、小写字母、数字、特殊字符
- 定期更换：90天强制更换
- 历史密码：最近5次密码不能重复
- 临时密码：首次登录必须修改
```

**权限限制**：
- 任何人都不能单独完成一级特殊数据修改
- 操作申请人不能是审核人员
- 系统管理员不能查看证明材料内容
- 修改前必须自动备份原始数据
- 修改后立即触发数据一致性检查

### 1.2 高危操作（预防为主）

**识别标准**：
- 影响10人以上的批量操作
- 不可逆的数据修改或删除
- 可能导致系统停机或异常的操作
- 敏感数据的批量导出

**具体操作清单**：
- 批量导入/导出学生信息（≥10条）
- 批量删除学生记录
- 数据库表结构修改（CREATE/ALTER/DROP TABLE）
- 系统服务启停操作
- 防火墙规则修改
- 服务器重启/关机
- 数据库恢复操作
- 权限角色修改

**管控要求**：
```
操作前必须完成：
1. 填写《高危操作申请单》，说明操作目的和影响范围
2. 技术负责人审批（1小时内响应）
3. 制定操作回滚方案
4. 通知相关人员操作时间窗口

操作过程中：
1. 录屏记录全程操作（堡垒机自动开启）
2. 双人在场：一人操作，一人监督
3. 操作步骤严格按照申请单执行
4. 每步操作前口头确认

操作完成后：
1. 验证操作结果
2. 监督员确认操作成功
3. 填写《高危操作完成记录》
4. 相关人员确认系统正常
```

### 1.2 中危操作（双人确认）

**识别标准**：
- 单个学生关键信息修改
- 可能影响业务流程的操作
- 权限相关的操作

**具体操作清单**：
- 二级特殊敏感数据修改（家庭住址、监护人联系方式等）
- 单个学生非关键信息修改（联系电话、地址等）
- 新生录入和注册报道
- 账号创建和权限分配
- 补换卡订单处理
- 重要接口调用（客服查询学生信息）

**管控要求**：
```
操作前：
1. 系统内提交操作申请，说明操作原因
2. 主管线上审批（4小时内响应）
3. 系统生成操作确认码

操作中：
1. 输入确认码后才能执行操作
2. 关键字段需要二次确认
3. 操作日志自动记录

操作后：
1. 发送操作完成通知
2. 相关数据自动备份
```

### 1.3 低危操作（记录可查）

**识别标准**：
- 信息查询类操作
- 非关键信息修改
- 日常监控和查看

**具体操作清单**：
- 学生信息查询
- 系统状态查看
- 非敏感信息修改（非特殊数据的普通信息）
- 操作日志查询
- 统计报表生成

**管控要求**：
```
操作中：
1. 记录查询条件和结果
2. 敏感查询自动标记
3. 异常查询行为告警

操作后：
1. 日志保存180天
2. 支持事后审计分析
```

---

## 二、岗位职责与权限边界

### 2.1 家长用户
**可操作范围**：
- 查看自己孩子的基本信息
- 查看孩子的卡状态
- 修改家庭联系方式

**禁止操作**：
- 查看其他学生任何信息
- 修改孩子的关键信息
- 批量操作

### 2.2 学校教师
**可操作范围**：
- 查看、管理本校学生信息
- 新生录入、注册报道
- 修改学生非关键信息（地址、电话）
- 查看本校学生的卡状态

**禁止操作**：
- 查看其他学校学生信息
- 删除学生记录（只能标记状态）
- 批量导出全校数据

### 2.3 客服人员
**可操作范围**：
- 通过身份证/卡号查询学生基本信息（用于补卡）
- 查看和处理补换卡订单
- 查询学生卡状态

**禁止操作**：
- 查看学生成绩、家庭信息等敏感数据
- 修改学生任何信息
- 跨校查询学生信息
- 批量导出学生数据

### 2.4 业务操作员
**角色定义**：学校教师、教务人员等负责日常学生管理的操作人员

**可操作范围**：
- 查看、管理本校学生信息
- 新生录入、注册报道
- 提交特殊敏感数据修改申请（附证明材料）
- 修改学生非特殊敏感数据信息

**禁止操作**：
- 直接修改一级特殊敏感数据
- 查看其他学校学生信息
- 审核自己的操作申请
- 查看操作日志

### 2.5 业务审核员
**角色定义**：校级或教育局负责审核业务变更的管理人员

**可操作范围**：
- 审核特殊敏感数据修改申请
- 验证证明材料真实性
- 批准或驳回操作申请
- 监督业务操作合规性

**禁止操作**：
- 直接修改学生任何信息
- 提交操作申请
- 审核自己的关联申请
- 执行系统操作

### 2.6 系统管理员
**角色定义**：负责服务器和数据库运维的技术人员

**可操作范围**：
- 服务器运维（启停服务、系统更新）
- 数据库维护（备份、优化）
- 应用部署和配置
- 执行经过审批的特殊数据修改脚本
- 用户账号管理（非业务数据）

**禁止操作**：
- 查看证明材料的具体内容
- 直接操作业务数据（除非执行已批准的脚本）
- 查看学生任何信息
- 参与业务审核

### 2.7 技术负责人
**角色定义**：负责技术架构和安全的技术专家

**可操作范围**：
- 复核特殊数据修改的技术可行性
- 评估系统影响和风险
- 制定回滚方案
- 审核系统管理员准备的操作脚本

**禁止操作**：
- 直接执行业务数据修改
- 查看学生敏感信息
- 参与业务审批
- 单独批准操作

### 2.8 日志审计员
**角色定义**：独立的审计人员，负责监督和审计所有操作

**可操作范围**：
- 查看所有操作日志和审计记录
- 设置异常行为监控规则
- 生成安全审计报告
- 发起安全事件调查

**禁止操作**：
- 修改任何业务数据
- 执行任何系统操作
- 查看学生详细信息（只能看操作记录）
- 参与业务操作或审批

### 职责分离控制机制

**角色互斥原则**：
- 同一人不能同时拥有操作权和审核权
- 同一人不能同时拥有审核权和审计权
- 同一人不能同时拥有操作权和审计权
- 系统管理员与业务数据完全隔离

**权限控制矩阵**：

| 操作类型 | 业务操作员 | 业务审核员 | 技术负责人 | 系统管理员 | 日志审计员 |
|----------|------------|------------|------------|------------|------------|
| 申请特殊数据修改 | ✅ | ❌ | ❌ | ❌ | ❌ |
| 审核申请 | ❌ | ✅ | ❌ | ❌ | ❌ |
| 技术复核 | ❌ | ❌ | ✅ | ❌ | ❌ |
| 执行修改 | ❌ | ❌ | ❌ | ✅(双人) | ❌ |
| 查看日志 | ❌ | ❌ | ❌ | ❌ | ✅ |
| 查看业务数据 | ✅(本校) | ✅(审核范围) | ❌ | ❌ | ❌ |

---

## 三、技术控制措施

### 3.1 堡垒机管控规则

**高危命令拦截**：
```bash
# 禁止执行的命令
rm -rf /*
drop database
truncate table
delete from without where clause
shutdown immediate
```

**需要二次确认的命令**：
```bash
# 需要输入确认码
delete from [table_name]
update [table_name] set
drop table
alter table
```

### 3.2 等保三级访问控制粒度

**字段级权限控制**：
```sql
-- 身份证号字段访问控制
CREATE VIEW student_masked_view AS
SELECT
    student_id,
    name,
    -- 仅授权人员可见完整身份证号
    CASE
        WHEN current_user_role() IN ('auditor', 'system_admin') THEN id_card
        WHEN current_user_school_id() = school_id THEN CONCAT(SUBSTRING(id_card, 1, 6), '****', SUBSTRING(id_card, 15, 4))
        ELSE '权限不足'
    END as id_card_display,
    -- 其他字段类似处理
FROM students;

-- 字段级访问策略
CREATE POLICY id_card_access ON students
FOR SELECT USING (
    (current_user_role() = 'auditor') OR
    (current_user_role() = 'system_admin' AND operation_type = 'approved_script') OR
    (current_user_role() = 'business_operator' AND current_user_school_id() = school_id AND has_approval(id_card_update_id))
);
```

**记录级访问控制**：
```sql
-- 本校数据访问控制
CREATE POLICY school_data_isolation ON students
FOR ALL USING (
    -- 系统管理员和审计员无限制
    current_user_role() IN ('system_admin', 'auditor') OR
    -- 业务人员只能访问本校数据
    current_user_school_id() = school_id OR
    -- 客服人员经授权可跨校查询
    (current_user_role() = 'customer_service' AND has_cross_school_auth())
);
```

**时间窗口访问控制**：
```sql
-- 非工作时间访问限制
CREATE POLICY working_hours_access ON students
FOR SELECT USING (
    -- 管理员和审计员全天候访问
    current_user_role() IN ('system_admin', 'auditor') OR
    -- 其他角色仅工作时间访问
    (EXTRACT(HOUR FROM CURRENT_TIME) BETWEEN 7 AND 22 AND
     EXTRACT(DOW FROM CURRENT_DATE) BETWEEN 1 AND 5) OR
    -- 紧急情况需要特殊授权
    has_emergency_access()
);
```

**接口访问控制**：
```json
{
  "endpoint": "/api/student/query",
  "field_access": {
    "all_users": {
      "student_id": "full",
      "name": "full",
      "card_status": "full",
      "school_name": "full"
    },
    "customer_service": {
      "id_card": "masked",
      "phone": "full",
      "address": "masked"
    },
    "external_api": {
      "student_id": "full",
      "card_status": "full"
    }
  },
  "authentication": "2fa_required",
  "audit_level": "full"
}
```

**动态权限分配**：
```sql
-- 基于任务的临时权限
CREATE TEMPORARY TABLE task_permissions (
    user_id VARCHAR(50),
    task_id VARCHAR(50),
    permission_type VARCHAR(50),
    field_list TEXT,
    record_count_limit INTEGER,
    expire_time TIMESTAMP
);

-- 任务完成后自动回收权限
CREATE OR REPLACE FUNCTION cleanup_task_permissions()
RETURNS void AS $$
BEGIN
    DELETE FROM task_permissions
    WHERE expire_time < CURRENT_TIMESTAMP;

    -- 记录权限回收日志
    INSERT INTO permission_cleanup_log
    SELECT user_id, task_id, 'expired', CURRENT_TIMESTAMP
    FROM task_permissions
    WHERE expire_time < CURRENT_TIMESTAMP;
END;
$$ LANGUAGE plpgsql;
```

### 3.3 接口权限控制

**客服网点接口**：
```
POST /api/student/query
参数: id_card OR card_no, reason
返回: [学生基础信息]
权限: 客服角色
审计: 记录查询原因和结果
```

**增效接口**：
```
POST /api/student/status
参数: card_no
返回: [卡状态]
权限: 对部接口
审计: 记录调用次数和频率
```

---

## 四、操作流程和检查表

### 4.1 高危操作检查表

**申请阶段**：
- [ ] 操作目的和影响范围明确
- [ ] 回滚方案制定完成
- [ ] 相关人员已通知
- [ ] 技术负责人已审批
- [ ] 操作时间窗口确认

**操作阶段**：
- [ ] 录屏功能已开启
- [ ] 监督人员已到场
- [ ] 操作步骤与申请单一致
- [ ] 每步操作前口头确认
- [ ] 系统响应正常

**完成阶段**：
- [ ] 操作结果验证成功
- [ ] 监督人员确认
- [ ] 完成记录填写
- [ ] 相关人员确认系统正常

### 4.2 特殊敏感数据修改检查表

**申请阶段检查**：
- [ ] 申请人身份已验证
- [ ] 证明材料真实有效（已核对原件）
- [ ] 证明材料已扫描上传并OCR识别
- [ ] 申请理由充分且符合政策
- [ ] 系统已生成唯一申请编号
- [ ] 申请人已签署承诺书

**初步审核检查**：
- [ ] 业务审核员已确认材料真实性
- [ ] 申请理由正当性已确认
- [ ] 相关利益冲突已排查
- [ ] 审核意见已记录
- [ ] 初审通过后已提交上级审核
- [ ] 审核时间记录完整

**技术复核检查**：
- [ ] 技术负责人已评估修改可行性
- [ ] 系统影响范围已评估
- [ ] 回滚方案已制定并验证
- [ ] 操作脚本已准备
- [ ] 数据备份方案已确认
- [ ] 技术风险已评估

**业务终审检查**：
- [ ] 教育局相关负责人已审批
- [ ] 政策法规符合性已确认
- [ ] 执行时间窗口已确定
- [ ] 相关部门已通知
- [ ] 最终审批文件已归档
- [ ] 审批流程完整性已验证

**双人执行检查**：
- [ ] 系统管理员A和B均已到场
- [ ] 录屏设备工作正常
- [ ] 操作脚本已由B独立审核
- [ ] 原始数据已自动备份
- [ ] 修改操作按计划执行
- [ ] 每步操作都有确认记录

**结果确认检查**：
- [ ] 修改结果已验证正确
- [ ] 申请人已确认修改效果
- [ ] 相关部门已收到修改通知
- [ ] 数据一致性检查已通过
- [ ] 完整操作链路已记录
- [ ] 所有文档已归档

### 4.3 双人确认流程

```
普通操作双人确认流程：
1. 操作人提交申请 → 系统生成确认码
2. 确认人收到确认请求 → 审核操作合理性
3. 确认人输入确认码 → 操作获得执行权限
4. 系统记录操作人和确认人信息
5. 操作执行 → 系统记录详细日志
6. 结果通知 → 相关人员知晓操作结果

特殊数据修改六阶段流程：
申请准备 → 初步审核 → 技术复核 → 业务终审 → 双人执行 → 结果确认
```

---

## 五、审计和监控

### 5.1 等保三级审计日志完整性保护

**必须记录的信息**：
- 操作人员账号和角色
- 操作时间和IP地址
- 操作类型（查询/修改/删除）
- 操作对象（学生ID/表名等）
- 操作结果（成功/失败）
- 对于查询：查询条件和结果数量
- 对于修改：修改前后的值

**等保三级日志完整性保护机制**：

1. **数字签名技术**：
```sql
-- 日志表结构
CREATE TABLE audit_logs (
    log_id BIGSERIAL PRIMARY KEY,
    user_id VARCHAR(50) NOT NULL,
    operation_type VARCHAR(50) NOT NULL,
    operation_time TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
    client_ip INET NOT NULL,
    target_object VARCHAR(100),
    operation_result VARCHAR(20) NOT NULL,
    details JSONB,
    hash_value VARCHAR(64) NOT NULL, -- SHA256哈希值
    digital_signature TEXT, -- 数字签名
    created_at TIMESTAMP WITH TIME ZONE DEFAULT NOW()
);

-- 数字签名函数
CREATE OR REPLACE FUNCTION sign_audit_log()
RETURNS TRIGGER AS $$
BEGIN
    -- 生成记录的哈希值
    NEW.hash_value = SHA256(NEW.user_id || NEW.operation_type ||
                              NEW.operation_time || NEW.client_ip ||
                              NEW.target_object || NEW.details::TEXT);

    -- 使用私钥进行数字签名
    NEW.digital_signature = sign_data_with_private_key(NEW.hash_value);

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;

-- 创建触发器
CREATE TRIGGER audit_log_sign_trigger
    BEFORE INSERT ON audit_logs
    FOR EACH ROW EXECUTE FUNCTION sign_audit_log();
```

2. **日志完整性验证**：
```sql
-- 完整性检查函数
CREATE OR REPLACE FUNCTION verify_log_integrity(log_id_param BIGINT)
RETURNS BOOLEAN AS $$
DECLARE
    log_record audit_logs%ROWTYPE;
    computed_hash VARCHAR(64);
    signature_valid BOOLEAN;
BEGIN
    -- 获取原始记录
    SELECT * INTO log_record FROM audit_logs WHERE log_id = log_id_param;

    -- 重新计算哈希值
    computed_hash = SHA256(log_record.user_id || log_record.operation_type ||
                            log_record.operation_time || log_record.client_ip ||
                            log_record.target_object || log_record.details::TEXT);

    -- 验证哈希值是否匹配
    IF log_record.hash_value != computed_hash THEN
        RETURN FALSE;
    END IF;

    -- 验证数字签名
    signature_valid = verify_signature_with_public_key(log_record.hash_value, log_record.digital_signature);

    RETURN signature_valid;
END;
$$ LANGUAGE plpgsql;
```

3. **日志存储保护**：
- **在线存储**：180天，写保护存储
- **归档存储**：1年，WORM（一次写入多次读取）存储
- **异地备份**：实时同步到异地灾备中心
- **加密传输**：日志传输全程加密

**日志保存要求**：
- 在线保存：180天
- 归档保存：1年
- 日志完整性：防篡改保护
- 数字签名：确保真实性和完整性
- 异地备份：防止本地灾难

### 5.2 异常行为监控

**告警规则**：
- 单个账号1小时内查询超过100次
- 非工作时间（22:00-7:00）的操作
- 连续3次密码失败后成功的登录
- 批量操作未审批就执行
- 从非常用IP地址的访问

**处理流程**：
1. 系统自动告警
2. 安全管理员15分钟内响应
3. 评估风险，必要时阻断操作
4. 24小时内完成调查和记录

---

## 六、等保三级数据完整性保护和应急响应

### 6.1 数据完整性保护要求

**等保三级依据**：等保三级要求"应采用必要的技术措施，保证数据在传输、存储、处理过程中的完整性。"

**数据完整性校验机制**：

1. **传输完整性保护**：
```sql
-- 数据传输完整性校验
CREATE OR REPLACE FUNCTION verify_transmission_integrity(
    data_original BYTEA,
    data_received BYTEA,
    checksum_original VARCHAR(64),
    checksum_received VARCHAR(64)
) RETURNS BOOLEAN AS $$
BEGIN
    -- 验证哈希值
    IF checksum_original != checksum_received THEN
        RETURN FALSE;
    END IF;

    -- 重新计算哈希值并验证
    IF SHA256(data_original) != checksum_original THEN
        RETURN FALSE;
    END IF;

    IF SHA256(data_received) != checksum_received THEN
        RETURN FALSE;
    END IF;

    RETURN TRUE;
END;
$$ LANGUAGE plpgsql;
```

2. **存储完整性保护**：
```sql
-- 重要表的完整性约束
ALTER TABLE students
ADD CONSTRAINT chk_id_card_format
CHECK (id_card ~ '^[1-9]\d{16}(19\d)?$');

ALTER TABLE students
ADD CONSTRAINT chk_phone_format
CHECK (phone ~ '^1[3-9]\d{9}$');

-- 数据校验触发器
CREATE OR REPLACE FUNCTION validate_student_data()
RETURNS TRIGGER AS $$
BEGIN
    -- 验证身份证号格式
    IF NEW.id_card IS NOT NULL AND NEW.id_card !~ '^[1-9]\d{16}(19\d)?$' THEN
        RAISE EXCEPTION '身份证号格式错误';
    END IF;

    -- 验证手机号格式
    IF NEW.phone IS NOT NULL AND NEW.phone !~ '^1[3-9]\d{9}$' THEN
        RAISE EXCEPTION '手机号格式错误';
    END IF;

    -- 记录完整性检查日志
    INSERT INTO data_integrity_log
    VALUES (NEW.student_id, 'VALIDATE', NEW.id_card || '|' || NEW.phone, CURRENT_TIMESTAMP);

    RETURN NEW;
END;
$$ LANGUAGE plpgsql;
```

3. **定期完整性检查**：
```sql
-- 每日自动完整性检查
CREATE OR REPLACE FUNCTION daily_integrity_check()
RETURNS void AS $$
DECLARE
    inconsistency_count INTEGER;
BEGIN
    -- 检查数据一致性
    SELECT COUNT(*) INTO inconsistency_count
    FROM (
        SELECT s.id_card, COUNT(*) as cnt
        FROM students s
        WHERE s.id_card IS NOT NULL
        GROUP BY s.id_card
        HAVING COUNT(*) > 1
    ) AS duplicates;

    -- 发现不一致时记录告警
    IF inconsistency_count > 0 THEN
        INSERT INTO integrity_alerts
        VALUES ('DATA_DUPLICATE', inconsistency_count, CURRENT_TIMESTAMP);

        -- 通知安全管理员
        INSERT INTO security_notifications
        VALUES ('SYSTEM_ADMIN', 'DATA_INTEGRITY_ALERT',
                '发现学生身份证号重复数据', CURRENT_TIMESTAMP);
    END IF;

    -- 检查关键字段完整性
    INSERT INTO integrity_report
    SELECT
        'MISSING_ID_CARD' as issue_type,
        COUNT(*) as count,
        CURRENT_TIMESTAMP as check_time
    FROM students
    WHERE id_card IS NULL OR id_card = '';

    -- 检查数据格式异常
    INSERT INTO integrity_report
    SELECT
        'INVALID_PHONE_FORMAT' as issue_type,
        COUNT(*) as count,
        CURRENT_TIMESTAMP as check_time
    FROM students
    WHERE phone !~ '^1[3-9]\d{9}$' AND phone IS NOT NULL;
END;
$$ LANGUAGE plpgsql;

-- 创建每日执行任务
SELECT cron.schedule('daily-integrity-check', '0 2 * * *', 'SELECT daily_integrity_check()');
```

### 6.2 数据完整性应急处理流程

**完整性破坏应急响应**：

1. **立即响应（15分钟内）**：
   - 暂停相关数据访问
   - 保护原始数据不被进一步破坏
   - 通知应急响应小组

2. **损害评估（2小时内）**：
   - 确定破坏范围和影响
   - 分析破坏原因和方式
   - 评估对业务的影响程度

3. **数据恢复（4小时内）**：
   - 从备份恢复被破坏的数据
   - 验证恢复数据的完整性
   - 重新建立完整性保护机制

4. **根因分析（24小时内）**：
   - 调查完整性破坏的根本原因
   - 修复相关的安全漏洞
   - 加强相关的防护措施

### 6.3 安全事件分级

**一般事件**：
- 单个账号异常登录
- 小范围查询异常
- 不影响系统正常运行
- 数据完整性轻微影响

**较大事件**：
- 批量数据泄露风险
- 系统性能受影响
- 可能影响多个用户
- 数据完整性部分破坏

**重大事件**：
- 数据确认泄露
- 系统宕机或严重异常
- 涉及大量用户数据
- 数据完整性严重破坏

### 6.2 应急联系人

| 角色 | 姓名 | 电话 | 备注 |
|------|------|------|------|
| 应急总指挥 | [姓名] | [电话] | 负责总体协调 |
| 技术负责人 | [姓名] | [电话] | 负责技术处置 |
| 安全负责人 | [姓名] | [电话] | 负责安全评估 |
| 业务负责人 | [姓名] | [电话] | 负责业务协调 |

---

## 七、培训和考核

### 7.1 必须培训内容

**新员工入职培训**：
- 本手册内容和操作规范
- 高危操作流程和双人确认机制
- 应急响应流程和联系方式

**年度复训**：
- 安全事件案例分析
- 操作规范更新内容
- 模拟应急演练

### 7.2 考核要求

- 每年进行1次操作规范考试
- 每半年进行1次应急演练
- 不合格人员重新培训，直至合格

---

## 附录

### 附录A：高危操作申请单模板

```
申请单编号: [自动生成]
申请时间: YYYY-MM-DD HH:MM
申请人: [姓名]
所在部门: [部门]
联系电话: [电话]

操作类型: [批量导入/批量删除/系统变更等]
操作目的: [详细说明操作目的]
影响范围: [影响的人数/系统范围]

操作步骤: [详细的操作步骤]
回滚方案: [详细的回滚方案]

风险评估: [可能存在的风险]
预防措施: [如何避免风险]

申请人签字: _________ 日期: _________
技术负责人审批: _________ 日期: _________
安全管理员审核: _________ 日期: _________
```

### 附录B：现场操作记录单模板

```
记录单编号: [自动生成]
操作时间: YYYY-MM-DD HH:MM
操作地点: [机房/办公室等]
操作内容: [具体操作内容]

操作人员: [姓名] 工号: [工号]
监督人员: [姓名] 工号: [工号]

操作步骤记录:
1. [时间] [操作内容] [结果]
2. [时间] [操作内容] [结果]
...

操作结果: [成功/失败]
发现异常: [如果有异常，详细记录]

操作人员签字: _________
监督人员签字: _________
日期: _________
```

### 附录C：权限申请审批表

```
申请编号: [自动生成]
申请人: [姓名]
所属部门: [部门]
申请岗位: [岗位]
申请原因: [详细说明]

所需权限:
- [ ] 查看权限：[具体内容]
- [ ] 修改权限：[具体内容]
- [ ] 删除权限：[具体内容]
- [ ] 其他权限：[具体内容]

权限期限: [永久/临时，写明截止时间]

申请人签字: _________ 日期: _________
部门主管审批: _________ 日期: _________
安全管理员审核: _________ 日期: _________
负责人批准: _________ 日期: _________
```

### 附录D：特殊敏感数据修改申请单

```
申请单编号: [自动生成]
申请时间: YYYY-MM-DD HH:MM
申请人: [姓名]
所在学校/单位: [学校/单位全称]
联系电话: [电话]
学生姓名: [学生姓名]
学生学号: [学号]

申请修改的数据类型（勾选）：
□ 一级特殊敏感数据
  □ 身份证号 (变更原因: [请填写])
  □ 学生姓名 (变更原因: [请填写])
  □ 学籍号 (变更原因: [请填写])
  □ 户籍信息 (变更原因: [请填写])
  □ 特殊身份标记 (变更原因: [请填写])

□ 二级特殊敏感数据
  □ 家庭详细住址 (变更原因: [请填写])
  □ 监护人联系方式 (变更原因: [请填写])
  □ 学生照片 (变更原因: [请填写])
  □ 学籍状态变更 (变更原因: [请填写])
  □ 奖惩记录 (变更原因: [请填写])

修改前数据: [请填写原始数据]
修改后数据: [请填写新数据]

申请理由详细说明: [详细说明修改原因和依据]

证明材料清单:
1. [材料名称] - [原件已核对□] - [已扫描上传□]
2. [材料名称] - [原件已核对□] - [已扫描上传□]
3. [材料名称] - [原件已核对□] - [已扫描上传□]

申请人承诺:
本人承诺以上所提供的信息和材料真实有效，如有虚假，愿意承担相应法律责任。

申请人签字: _________ 日期: _________
学校负责人审核: _________ 日期: _________

=== 初步审核意见 ===
审核人: [姓名]
审核时间: YYYY-MM-DD HH:MM
材料真实性: [通过/不通过] - [详细说明]
申请正当性: [通过/不通过] - [详细说明]
审核结论: [同意提交/驳回申请]
审核人签字: _________

=== 技术复核意见 ===
技术负责人: [姓名]
复核时间: YYYY-MM-DD HH:MM
技术可行性: [可行/不可行] - [详细说明]
系统影响评估: [影响范围和程度]
回滚方案: [已制定/未制定]
复核结论: [同意执行/需要补充/不同意]
技术负责人签字: _________

=== 业务终审意见 ===
终审人: [姓名/职务]
终审时间: YYYY-MM-DD HH:MM
政策符合性: [符合/不符合] - [依据说明]
最终结论: [批准执行/驳回申请]
执行时间窗口: [建议执行时间]
终审人签字: _________ 职务: _________

=== 执行记录 ===
执行人A: [姓名] 工号: [工号]
执行人B: [姓名] 工号: [工号]
执行时间: YYYY-MM-DD HH:MM
操作脚本编号: [脚本编号]
执行结果: [成功/失败]
数据备份确认: [已确认]
执行人A签字: _________
执行人B签字: _________

=== 结果确认 ===
申请人确认: [修改正确□/有错误□] 确认人: _________ 日期: _________
数据一致性检查: [通过□/未通过□] 检查人: _________ 日期: _________
相关部门通知: [已完成□] 通知时间: _________
日志审计员确认: [操作链路完整□] 审计员: _________ 日期: _________
```

### 附录E：特殊数据修改证明材料要求

**身份证号修改所需材料**：
- 公安部门出具的户籍变更证明原件
- 学生户口本复印件（含变更页）
- 学生本人或监护人身份证复印件
- 学校出具的变更申请说明（加盖公章）

**姓名修改所需材料**：
- 公安部门出具的姓名变更证明原件
- 户口本复印件（含变更页）
- 学校出具的姓名变更说明（加盖公章）
- 如有学籍号变更需教育局相关文件

**学籍号修改所需材料**：
- 教育局出具的学籍号变更文件原件
- 学校学籍管理部门的变更申请
- 相关政策依据文件
- 变更原因的详细说明

**户籍信息修改所需材料**：
- 公安部门出具的户籍变更证明
- 户口本复印件（含变更页）
- 家庭关系证明材料
- 学校审核确认文件

**特殊身份标记修改所需材料**：
- 相关政府部门出具的认定文件
- 医疗证明（如残疾认定）
- 民政部门证明（如贫困认定）
- 学校相关部门审核意见

**证明材料要求**：
- 所有材料必须提供原件供核对
- 复印件必须加盖出具单位公章
- 境外材料需提供翻译件和公证
- 电子版材料必须为清晰扫描件
- 材料有效期必须在申请有效期内

---

**本手册自发布之日起执行，由数据安全管理领导小组负责解释和修订。**