Skip to content

访问控制与脱敏怎么落地 ​

难度与前置

难度:进阶
前置:知道库表分层与对外出口(ADS/BI/导出);能区分「读仓权限」与「字段可见性」。
读完能做什么:按「谁能看 → 脱敏分层 → 导出审批 → 抽检验收」填完一张可勾选清单,并留下带数字的验收记录。

适用场景 ​

  • 含手机号 / 设备号 / 身份证号 / 支付账号等字段的明细表要对分析师、外包、合作方开放
  • ADS / BI 看板要给业务看,但不能把明文 PII 带出仓
  • 一次性导出到本地 / 邮件 / 第三方平台,需要审批与留痕
  • 新角色入职或跨组借数,临时开读权限

不适用:

真实场景(一条) ​

短剧投放组要给外包分析师开通 ads_user_profile(用户画像宽表)只读,并定期导出「活跃用户 × 消耗」到 BI。开发直接把生产库 SELECT 权限开给个人账号:

  • 手机号、设备号明文可查;一次导出 50 万行进个人邮箱
  • 无审批单、无脱敏视图;事后抽检发现导出文件含完整手机号
  • 权限半年未回收,人已离组仍能查

按本清单重来:表分级为「敏感明细」→ 分析师只读脱敏视图(手机号掩码、设备号哈希)→ 明文仅限数仓 owner + 合规白名单 → 导出走审批单 + 行数上限 + 水印文件名 → 抽检 100 行无明文。同月无「明文出仓」工单。

怎么做(步骤清单) ​

1. 先定「谁能看」:角色 × 库表分级(可勾选) ​

text
角色(示例,按团队改名):
□ 数仓 owner / 值班
□ 数仓开发(本组)
□ 分析师 / 数开偏业务
□ 外包 / 合作方只读
□ 服务账号(ADS/API/调度)

库表分级:
□ L0 公开聚合(无个体标识)
□ L1 业务明细(无强 PII,可有匿名 ID)
□ L2 敏感明细(含手机号/证件/账号等)
□ L3 密钥级 / 合规冻结(默认不开放查询)

默认矩阵(写进权限单,禁止口头约定):

角色 \ 分级L0L1L2 脱敏视图L2 明文L3
owner / 值班✓✓✓✓(白名单)审批后临时
本组开发✓✓✓按需临时✗
分析师✓✓✓✗✗
外包 / 合作方✓按需✓(仅授权表)✗✗
服务账号按任务按任务按任务禁止交互查询✗

口诀:人用角色,不用个人账号长期挂高权限;服务账号不给交互式查询。

分层归属仍按 数仓分层:敏感字段尽量沉在受限层,ADS 出口默认不带明文 PII。

2. 脱敏分层:明文 / 掩码 / 哈希 / 聚合 ​

对每个敏感字段勾一层(可并存多视图,禁止「一张表伺候所有人」):

层级做法(示例)适用
明文原值;库表 ACL 收紧合规白名单、事故排查窗口
掩码138****5678、证件保留后 4人工排查、客服类只读
哈希SHA256(salt + 原值),salt 不进可导出表Join / 去重 / 归因,不需回翻明文
聚合按日/渠道汇总,无个体行看板、对外周报、合作方

落地约定:

  1. 物理表可保留明文(ETL 需要),对外只发脱敏视图或 ADS 无 PII 表
  2. 哈希必须加平台级 salt;禁止客户端自选无 salt 的 MD5 当「脱敏」
  3. 掩码规则写进字典(与口径字典同类),改规则走变更,不是改 SQL 顺手一改
  4. 需要「可逆」→ 走合规加密与密钥托管,不要自己造可逆「脱敏」冒充安全

3. 导出审批门禁(阻断明文裸出) ​

凡「出仓」(本地文件、邮件、网盘、第三方 BI、截图批量)一律走单:

text
导出审批单(最小字段)
申请人 / 角色 / 用途(一句话)
对象:库.表 / 视图 / ADS
字段清单:□含 PII □已脱敏 □仅聚合
时间窗 / 过滤条件 / 预估行数
接收方:□本人 □组内共享盘 □外部邮箱(须升级审批)
保留期:____ 天;到期删除责任人:____
审批人:数据 owner +(外部接收时)合规/业务对接人

门禁规则(可改数字,但必须有数):

  • 单次导出行数默认上限(如 ≤ 10 万);超限拆批或改聚合
  • L2 明文导出:默认拒绝;例外须双人审批 + 有时限链接
  • 文件名含水印:export_{table}_{uid}_{date};禁止匿名 data.csv
  • 调度/服务账号导出走任务审计,不走个人桌面「另存为」

改表或扩列含新敏感字段时,先做 影响评估,再更新本篇分级与视图。

4. 抽检验收(发布权限 / 开放视图前) ​

每次新开角色、新脱敏视图、新导出通道,至少做:

  1. 权限抽检:用目标角色账号登录,确认打不开明文表 / 打得开脱敏视图
  2. 字段抽检:随机 N 行,敏感列符合掩码/哈希约定(见验收表)
  3. 导出抽检:走一遍审批单,检查行数、水印、接收方、无明文
  4. 回收演练:临时权限到期是否自动或工单关闭(抽 1 个历史账号)

质量侧异常波动与错数仍走 质量闭环;本篇只验「可见性与出仓」,不替代对账。

5. 日常运营(别一次做完就忘) ​

  • 季度权限回顾:离职/转岗清单对角色 diff
  • 敏感字段字典与视图定义同仓版本管理
  • 发现明文出仓:先收权限与链接,再补脱敏,最后写事故单(原因 / 影响行数 / 回收时间)

常见坑(至少这些) ​

  1. 个人账号长期挂生产库 admin
    审计对不上人;离职仍能查。

  2. 「开了库权限」=「能看所有字段」
    无列级/视图级控制,脱敏形同虚设。

  3. 用无 salt 的哈希当脱敏,还能被彩虹表打穿

  4. ADS/看板直接读 L2 明细明文
    业务同学截图或「另存为」即出仓。

  5. 导出只靠自觉,无行数上限与审批单

  6. 脱敏规则改了不走变更,历史导出无法解释

  7. 外包账号与正式分析师同权

  8. 把本篇当成 RBAC 概念课,清单勾了但不抽检

如何验收(带数字的前后对比) ​

项改前(示例)改后(目标)
持有 L2 明文交互权限的人数如 ≥ 15(含外包)≤ 白名单人数(如 ≤ 3)且有名单
脱敏视图抽检(随机 100 行)含完整手机号/证件0 行明文;掩码/哈希 100% 符合字典
无审批导出次数 / 月如 ≥ 1 次可查到0;例外有双人审批单
单次导出超上限未拆批发生过0;超限被门禁拦住
离职/转岗权限回收时效如 > 7 天≤ 约定(如 1 个工作日)
明文出仓事故(可统计工单)有观察期内 0
text
访问与脱敏验收记录(可复制)
对象:库.表 / 视图 / 导出通道
分级:L0 / L1 / L2 / L3
角色矩阵已更新:是/否
脱敏层级:明文白名单 / 掩码 / 哈希 / 聚合
导出门禁:行数上限 ____;外部接收升级审批:是/否
抽检:权限账号 ____;字段 N=____ 行;导出试跑单号 ____
回收:抽检账号 ____ 已关闭
签字(数据 owner):________  日期:________

Checklist:

  • [ ] 角色 × 分级矩阵已书面化,无「先开再说」
  • [ ] L2 对外默认脱敏视图;明文仅白名单
  • [ ] 哈希含平台 salt;掩码规则进字典
  • [ ] 导出有审批单、行数上限、水印文件名
  • [ ] 抽检记录含数字(行数 / 人数 / 时效)
  • [ ] 链到分层 / ADS / 影响评估 / 平台原则,不重复写概念课
  • [ ] 无未公开公司项目名与真实内部表名风格泄露

相关面试题 ​

题库小程序链接待定;先用站内锚点占位。

  • [ ] 题:L2 对外默认给明文还是脱敏视图?(考察点:对外默认脱敏;明文仅白名单人数可控)→ 占位:#todo-interview-access-masking-l2-default
  • [ ] 题:随机 100 行抽检过线标准是什么?(考察点:0 行明文;掩码/哈希符合字典)→ 占位:#todo-interview-access-masking-sample
  • [ ] 题:导出审批门禁至少卡什么?(考察点:审批单+行数上限+水印;超限拦住)→ 占位:#todo-interview-access-masking-export
  • [ ] 题:离职权限回收怎样验收时效?(考察点:≤约定工作日关闭)→ 占位:#todo-interview-access-masking-revoke

改写说明:可勾选清单体例,对齐影响评估专篇;安全概念与环境隔离指向云上专篇,发布与改表指向 ADS / lineage 专篇。虚构通用投放画像例,无未公开公司数据。