在表上使用数据屏蔽时,我发现了一个意外的结果。我有一个以提升角色运行的进程,它加载包含敏感数据的表。因为摄取的数据实际上是对表的完整刷新,所以过程运行如下:
表 A 在多个列上存在数据屏蔽规则。
表 B 是使用创建的create transient table B like A copy grants
数据在表 B 中加载和处理。
表 A 使用更新alter table A swap with B
表 B 被删除。
发生的情况是创建的表 B 缺少应用于表 A 中存在的特定列的数据屏蔽策略。交换时,表 A 上的先前屏蔽策略被消除,因为它不再存在于表 B 上。
要解决此问题,创建表 BI 后必须重新应用数据屏蔽策略。一旦这到位,它就会在交换操作中被交换到表 A。
我认为这对于没有预料到这种行为的开发人员来说是一个缺陷,如果他们没有正确测试他们的工作,可能会暴露信息。
我的预期行为是:
(1) 像 A 一样创建表 B 时,表 B 还包括该表上的所有数据策略,这可能是列掩码或行级安全性。
(2) 当表 B 与 A 交换时,被交换到 (A) 的表维护该表上的数据策略。
我的偏好是(1)。也许这可以是一个额外的命令,比如
create table B
like A
copy grants
copy [masking] policies;
这真的是一个安全漏洞还是我错过了什么?