← 中文资源

简体中文版本

用视图遮蔽敏感列

通过视图为支持与分析角色提供遮蔽后的列,仅授予视图访问权,并保持原始表受限。

阅读英文原文

概述

支持与分析人员需要查看记录,但授予整表权限会暴露他们并不需要的完整个人信息。遮蔽视图配合角色权限,可只暴露必要字段,前提是同时撤销对基表的直接访问权限。

关键步骤

  1. 创建只选非敏感列并遮蔽其余列的视图。
  2. 仅向支持与分析角色授予视图的 SELECT 权限。
  3. 撤销这些角色对基表的直接访问权限。
  4. 记录遮蔽规则,并以受限角色身份查询加以验证。

验证

  • 受限角色看不到完整敏感值。
  • 受限角色无法直接读取基表。
  • 应用自身写入不受影响。
  • 遮蔽足以防止重新识别。

注意事项

  • 遮蔽视图只约束经该视图的读取,不改变应用自身存储的内容。
  • 部分遮蔽需要行级上下文,此时应使用函数而非静态视图。

适用范围

本条目围绕「用视图遮蔽敏感列」给出可复制的步骤、验证方式与常见问题,适合需要按此流程落地的工程团队。执行时请结合自身上下文调整命令与阈值,并在变更前后留存证据,便于后续复核与回滚。

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;