
1) 【一句话结论】:采用字段级加密(针对敏感字段如身份证、手机号)结合细粒度RBAC(基于角色和记录/字段权限)的访问控制,并部署全链路审计日志,确保数据隐私合规(符合个人信息保护法)且访问可控。
2) 【原理/概念讲解】:老师讲解:
3) 【对比与适用场景】:
| 模型 | 定义 | 特性 | 使用场景 | 注意点 |
|---|---|---|---|---|
| 字段级加密 | 仅对敏感字段加密,其他明文 | 性能影响小,存储效率高,解密粒度细 | 用户信息表(身份证、手机号加密,姓名明文) | 密钥管理复杂,需字段映射表 |
| 全表加密 | 整个表所有字段加密 | 数据整体保密,但查询需解密,性能低 | 敏感数据集中存储(如加密数据库) | 性能开销大,适合数据整体保密场景 |
访问控制模型对比:
4) 【示例】:假设存储用户表(user),字段有id(主键)、username(明文)、password_hash(哈希)、phone(字段级加密)、idcard(字段级加密)。
伪代码示例:
-- 创建用户表
CREATE TABLE user (
id INT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
password_hash CHAR(64) NOT NULL,
phone VARBINARY(256) NOT NULL, -- 加密后存储
idcard VARBINARY(256) NOT NULL -- 加密后存储
);
-- 创建审计日志表
CREATE TABLE audit_log (
log_id BIGINT PRIMARY KEY,
op_type VARCHAR(10),
op_user VARCHAR(50),
op_time TIMESTAMP,
op_record JSON
);
-- 插入用户(字段级加密)
INSERT INTO user (id, username, password_hash, phone, idcard)
VALUES (1, 'user1', 'hash1', AES_ENCRYPT('13800138000', KMS_KEY), AES_ENCRYPT('110101199001011234', KMS_KEY));
-- 更新用户手机号(字段级加密)
UPDATE user
SET phone = AES_ENCRYPT('13800138001', KMS_KEY)
WHERE id = 1;
-- 查询用户(解密字段)
SELECT id, username, phone = AES_DECRYPT(phone, KMS_KEY) AS phone, idcard = AES_DECRYPT(idcard, KMS_KEY) AS idcard
FROM user
WHERE id = 1;
5) 【面试口播版答案】:(60-120秒)
“面试官您好,针对安全数据的存储方案,核心思路是采用字段级加密+细粒度RBAC访问控制+全链路审计。具体来说,对敏感字段(如身份证、手机号)做字段级加密,用AES-256算法,密钥由密钥管理系统(KMS)管理,保证数据存储时敏感信息不可见;访问控制上,通过RBAC模型定义角色(如管理员、普通用户),管理员拥有全表读写权限,普通用户仅能访问自己的记录,且字段级权限控制(如普通用户只能读取姓名,管理员可读取身份证),满足细粒度需求;审计方面,所有对敏感数据的操作(增删改查)都会记录到审计日志,包含操作者、时间、操作前后的数据,用于追踪和合规检查。这样既能符合个人信息保护法对数据隐私的要求,又能有效控制数据访问,确保安全。”
6) 【追问清单】:
7) 【常见坑/雷区】: