
1) 【一句话结论】采用分层权限模型(基于角色的访问控制结合数据库行级安全),针对星型模式下的维度表与事实表,通过列级(敏感字段脱敏)和行级(特定数据行过滤)控制,满足教育行业敏感数据合规(如《个人信息保护法》),并考虑性能优化。
2) 【原理/概念讲解】老师口吻,解释核心概念:
3) 【对比与适用场景】
| 控制方式 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 列级控制(列级权限) | 控制对数据库表中特定列的访问权限 | 保护敏感字段(如身份证、家庭住址),只允许读取非敏感列 | 业务人员查看学习时长,分析师查看部分字段(如成绩) | 需数据库支持列权限(如PostgreSQL的列级安全,或通过视图) |
| 行级控制(行级安全) | 控制对数据行(记录)的访问权限 | 过滤敏感数据行,只允许访问特定记录(如特定学生、特定课程) | 数据分析师分析特定学生行为,管理员访问敏感数据(需额外授权) | 可能影响查询性能,需索引优化 |
| 基于角色的访问控制(RBAC) | 权限分配给角色,用户绑定角色 | 角色抽象,权限集中管理,适合静态角色 | 管理员、分析师、业务人员等固定角色 | 角色变更需手动,动态调整复杂 |
4) 【示例】(PostgreSQL RLS配置,星型模式下的事实表与维度表)
-- 创建策略(行级控制,仅允许data_analyst角色访问特定学生ID的行)
CREATE POLICY data_analyst_policy ON learning_fact
FOR SELECT
USING (user_role = 'data_analyst' AND student_id IN (SELECT student_id FROM allowed_students));
-- 创建角色
CREATE ROLE data_analyst;
CREATE ROLE business_user;
CREATE ROLE admin;
-- 授予列级权限(列级控制,脱敏敏感字段)
-- 假设student维度表有personal_info(敏感),course维度表有course_name(非敏感)
GRANT SELECT (student_id, course_name, study_hours) ON student_dim TO data_analyst;
GRANT SELECT (student_id, study_hours) ON business_view TO business_user;
-- 创建脱敏视图(列级控制)
CREATE VIEW business_view AS
SELECT student_id, study_hours, personal_info
FROM student_dim
WHERE personal_info = '***';
-- 授予权限
GRANT SELECT ON business_view TO business_user;
5) 【面试口播版答案】
面试官您好,针对好未来数据仓库的权限控制,核心方案是分层模型,结合基于角色的访问控制(RBAC)和数据库行级安全(RLS),针对星型模式下的维度表与事实表,实现列/行控制,满足教育行业敏感数据合规。具体来说,角色分为管理员、数据分析师、业务人员。管理员配置权限,数据分析师可访问课程、学习行为等非敏感数据,行级控制确保只查特定学生或时间范围;业务人员通过脱敏视图查看学习时长,敏感信息(身份证、家庭住址)脱敏后存储。合规方面,根据《个人信息保护法》,敏感数据列级控制,审计日志记录所有操作,确保可追溯。比如,用PostgreSQL的RLS,创建策略,条件为用户角色是data_analyst且学生ID在允许列表,这样业务人员无法访问敏感行,同时通过视图脱敏保护敏感字段。
6) 【追问清单】
7) 【常见坑/雷区】