先最小化,再脱敏
报表的作用是支撑决策,而不是复制业务库。最小化就是先删:决策不需要的字段、不需要的粒度、不需要的历史长度都不进数据集。剩下必须展示的字段再做脱敏——掩码、截断、泛化到区间或分组、哈希或令牌化。顺序不能颠倒:先脱敏再最小化,会把人力花在保护本来就不该出现的字段上。
基本信息
| 最小化原则 | 只保留决策必需的字段、粒度与时间跨度 |
|---|---|
| 脱敏手段 | 掩码、截断、泛化、哈希、令牌化 |
| 处理位置 | 在数据源层统一处理,避免模板各自实现 |
| 可逆性 | 优先不可逆;需还原时走单独审批与留痕 |
| 高风险出口 | 导出、附件、大屏、外部接口需单独收紧 |
典型使用场景
- 工单类报表:展示处理量而非申请人联系方式,确需联系时用工号反查
- 日志类报表:IP 聚合到网段、账号替换为人员标识,保留可追溯性
- 对外报送:只发聚合结果,不发明细与原始标识
- 大屏展示:公开区域可视,任何标识字段都不得直接呈现
- 数据导出:按导出用途限定列与行范围,并记录导出行为
字段类型与处理方式
| 数据类型 | 最小化做法 | 脱敏做法 |
|---|---|---|
| 手机号与邮箱 | 非必要不发,或只保留工号 | 中间位掩码,对外导出整体隐藏 |
| 身份证与银行卡 | 不进入报表数据集 | 仅保留必要字符,其余掩码 |
| IP 地址 | 聚合到网段粒度 | 末段掩码,对外只显示网段 |
| 内部账号 | 以人员标识替代登录名 | 哈希后保留关联关系 |
| 费用金额 | 聚合到项目或部门维度 | 个人维度不展示 |
| 自由文本备注 | 不导出或限长 | 按规则清洗可能的标识信息 |
在数据源层统一脱敏
在数据源层统一脱敏
-- 报表视图只暴露脱敏后的字段,明文列不放行
CREATE VIEW v_ticket_report AS
SELECT ticket_id,
mask_phone(applicant_phone) AS applicant_phone_masked, -- 中间位掩码
regexp_replace(client_ip, '\.[0-9]+$', '.0') AS client_net, -- 末段置零
hash_short(user_login) AS user_ref, -- 保留可关联性,不暴露登录名
status, duration_min
FROM fact_ticket
WHERE NOT is_internal_test; -- 测试数据不进报表
-- 有还原需求时走单独审批流程,明文视图不授予报表账号脱敏放在数据源层才可复用:放在模板里,新增一张报表就要重新实现一遍,漏掉一处就泄露一处。脱敏视图与明文视图应分属不同授权。
导出与附件是主要泄露路径:界面上的脱敏挡不住一次性导出全量明文。导出功能要限定列与行范围、要求填写用途、记录操作主体,必要时加水印。