概述
支持与分析人员需要查看记录,但授予整表权限会暴露他们并不需要的完整个人信息。遮蔽视图配合角色权限,可只暴露必要字段,前提是同时撤销对基表的直接访问权限。
关键步骤
- 创建只选非敏感列并遮蔽其余列的视图。
- 仅向支持与分析角色授予视图的 SELECT 权限。
- 撤销这些角色对基表的直接访问权限。
- 记录遮蔽规则,并以受限角色身份查询加以验证。
验证
- 受限角色看不到完整敏感值。
- 受限角色无法直接读取基表。
- 应用自身写入不受影响。
- 遮蔽足以防止重新识别。
注意事项
- 遮蔽视图只约束经该视图的读取,不改变应用自身存储的内容。
- 部分遮蔽需要行级上下文,此时应使用函数而非静态视图。
适用范围
本条目围绕「用视图遮蔽敏感列」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。
CREATE VIEW customers_masked AS
SELECT id, tenant_id,
left(email, 1) || '***@' || split_part(email, '@', 2) AS email,
regexp_replace(phone, '[0-9]', '*', 'g') AS phone
FROM customers;
REVOKE SELECT ON customers FROM support_role;
GRANT SELECT ON customers_masked TO support_role;