0

在表上使用数据屏蔽时,我发现了一个意外的结果。我有一个以提升角色运行的进程,它加载包含敏感数据的表。因为摄取的数据实际上是对表的完整刷新,所以过程运行如下:

表 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;

这真的是一个安全漏洞还是我错过了什么?

4

1 回答 1

0

使用 alter table A swap with B 更新表 A

表 B 被删除。表 A 使用 alter table A swap with B 更新

表 B 被删除。

在第一步中,它从具有屏蔽策略的表 A 开始,并在交换后以具有它的表 B 结束。

在第二步中,删除具有屏蔽策略的表 B 表。

SWAP WITH 语法相当于一步完成,而不是三步:

alter TABLE_A    rename to TABLE_TEMP;
alter TABLE_B    rename to TABLE_A;
alter TABLE_TEMP rename to TABLE_B;

SWAP WITH 语法允许这在单个事务中发生,因此不会有瞬间表名不是它们需要的名称。因此,您可以看到,当它的步骤是明确的时,更清楚的是,应用了屏蔽策略的表在这一系列步骤中被删除了。

于 2021-09-10T22:11:33.323 回答