考察点
安全题考的是边界意识:权限收到什么粒度、脱敏在什么环节做、出了问题怎么追溯。面试官想听具体机制——列级权限怎么实现、动态脱敏在引擎哪一层生效、脱敏算法怎么选。追问会落在「脱敏后还能不能关联分析」「权限怎么和资产分级联动」。
参考答案
权限模型:RBAC 打底,ABAC 补细粒度
表级、库级权限用 RBAC(基于角色)足够:分析师角色给 DWS 层读权限,开发角色给 DWD 读写。但实际需求经常是「财务能看工资表但看不到身份证号那一列」「分公司只能看自己区域的数据」,这就要列级和行级权限,RBAC 的角色会爆炸,需要 ABAC(基于属性:用户部门、数据敏感级别、区域标签)或者 Ranger 的策略模型来补。
Ranger 这套体系怎么工作
Apache Ranger 是 Hadoop 生态权限的事实标准:统一的策略管理中心,给 Hive/HDFS/Kafka/HBase 等组件各装一个 plugin,插件内嵌在引擎侧做鉴权。策略支持库/表/列三级,列级支持 deny 和脱敏策略(masking policy)——比如对 phone 列配 MASK(只留前 3 后 4),用户查询时引擎返回的就是脱敏结果。Ranger 和 Atlas 联动是加分项:Atlas 里给字段打了「PII」分类标签,Ranger 可以按标签下发策略,新增敏感字段自动继承管控,不用逐表配置。
脱敏的两条路径
静态脱敏(SDM):数据落地前就处理掉。典型场景是从生产库抽数到测试环境、或者入湖时就把身份证做加密/哈希。手段包括替换(姓名换假名)、哈希(手机号 SHA-256 加盐)、加密(AES,可逆,需要还原场景用)、泛化(精确地址变城市)。静态脱敏的表给大多数人用,明文表严格收权限。
动态脱敏(DDM):数据库存明文,查询时按用户身份实时掩码。实现在引擎层——Ranger masking policy、或者自研的 SQL 改写网关(拦截查询,对敏感列包一层 mask 函数)。动态的好处是一份数据多种视图,坏处是每个查询入口都要管住,漏一个引擎(比如有人用 Spark 直读文件绕过了 HiveServer2)就形同虚设。这是工程上最容易翻车的点:文件层权限和 SQL 层权限要一致,否则列级管控白做。
脱敏算法怎么选
要回答「脱敏后还能不能用」:哈希(加盐)保持可关联性,同手机号哈希值相同,还能做 join 和去重统计,用户画像场景够用;但一旦加盐泄露或者手机号空间小可被彩虹表爆破(11 位手机号空间才百亿级),所以不能当强保护。AES 加密可逆,适合「特定授权流程后可还原」的场景。完全匿名的统计场景直接截断/泛化最安全。面试里主动提「手机号哈希可被字典爆破,盐要保管好且定期评估」,这个细节很能体现实战感。
审计是底线
所有敏感数据的访问要留痕:谁、什么时候、查了哪张表哪些列、带没带走(导出行为单独审计)。审计日志自己也要进数仓,做异常检测——比如某账号突然高频导出敏感表,自动告警。合规上,《个人信息保护法》要求个人信息处理有记录、可追责,审计不是可选项。
整体串一遍
分类分级先行(知道什么敏感)→ 权限按分级下发(标签驱动)→ 脱敏按场景选静态/动态 → 审计闭环。四个环节缺一个,体系就有洞。
可能的追问
- 行级权限(不同区域看不同数据)怎么实现? 答 Ranger 支持 row-filter 策略,或者建视图/物化视图按区域切分;ABAC 体系下把区域作为用户属性匹配数据行标签。
- 怎么防止有人绕过脱敏直读底层文件? 答 HDFS/对象存储层的 ACL 收紧,只允许引擎服务账号读文件,用户查询必须走带鉴权的引擎入口(HiveServer2/Trino 网关),双管齐下。
- 测试环境数据从哪来? 答静态脱敏后的抽样数据,敏感字段全部替换/哈希;严禁生产明文直接进测试库,这是审计必查项。