
1) 【一句话结论】
依据《个人信息保护法》“最小必要原则”与“分级分类”要求,通过数据分类、加密存储、细粒度访问控制(如ABAC模型)、动态脱敏、全链路审计等机制,确保用户数据在存储和访问环节的合规性与安全性。
2) 【原理/概念讲解】
老师口吻,解释关键概念:
3) 【对比与适用场景】
| 模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| RBAC | 基于角色的访问控制,通过角色分配权限 | 角色固定,权限集中管理,适合角色结构清晰的系统 | 企业内部系统(如HR系统,角色分为管理员、普通员工) | 角色与权限绑定过紧,可能影响灵活性 |
| ABAC | 基于属性的访问控制,通过属性动态计算权限 | 权限动态计算,支持复杂条件(如用户权限随时间变化) | 金融、医疗等敏感数据系统(如银行账户查询,需根据用户身份、资源状态授权) | 属性定义复杂,计算开销大 |
4) 【示例】
设计一个用户数据存储和访问控制的API接口(伪代码):
# 数据库存储(假设使用SQL)
CREATE TABLE user_data (
user_id INT PRIMARY KEY,
name VARCHAR(50),
email VARCHAR(100),
id_card VARCHAR(18) ENCRYPTED, # 加密存储
phone VARCHAR(11) DYNAMIC_DESENSITIZED, # 动态脱敏
bank_card VARCHAR(19) ENCRYPTED
);
# 访问控制函数(ABAC)
def authorize(user_role, resource_type, is_admin):
if is_admin:
return True
elif user_role == "普通用户" and resource_type == "敏感数据":
return False
else:
return True
# API接口(示例)
@app.route('/user/<user_id>/data')
def get_user_data(user_id):
# 验证用户身份
if not verify_user(user_id):
return "Unauthorized", 401
# 获取用户数据
user = query_user_data(user_id)
# 动态脱敏
user['phone'] = desensitize_phone(user['phone'])
user['bank_card'] = "**** **** **** " + user['bank_card'][15:] # 仅显示最后4位
return user, 200
# 审计日志记录
def log_audit(user_id, operation, sensitive_data):
audit_log.append({
"user_id": user_id,
"timestamp": datetime.now(),
"operation": operation,
"sensitive_data": sensitive_data
})
5) 【面试口播版答案】
“面试官您好,针对《个人信息保护法》下用户数据的存储和访问控制,核心思路是分级分类、加密存储、细粒度访问控制、动态脱敏、全链路审计。首先,数据要按敏感程度分类,比如身份证号、手机号属于敏感信息,存储时必须加密(比如AES-256),一般信息如姓名、邮箱明文存储但需备份加密。然后访问控制用ABAC模型,比如管理员能访问所有数据,普通用户只能看自己的脱敏信息(比如手机号只显示前3位)。动态脱敏很重要,API返回时才脱敏,避免存储时泄露。最后,所有敏感数据的访问都要记录审计日志,包括谁、何时、做了什么操作,方便事后追溯合规性。这样就能满足《个人信息保护法》的要求了。”
6) 【追问清单】
7) 【常见坑/雷区】