环境:带有基于 Java 的应用程序的 Oracle 11g DB
我们正在寻找加密数据库中的数据,用于表的一些敏感列。
我们希望这些列被解密并且对一组用户 A 可见。我们不希望这些加密列对另一组用户 B 可见。但是,这个用户集 B 应该能够看到其余的表的非加密列。
从各种文章和帖子中,我了解到 TDE 在列级别进行透明的加密和解密,但是如果上述基于用户/角色的加密,列级别粒度是否可行,则无法找到明确的信息。
我们可以使用 TDE 实现上述目标吗?
环境:带有基于 Java 的应用程序的 Oracle 11g DB
我们正在寻找加密数据库中的数据,用于表的一些敏感列。
我们希望这些列被解密并且对一组用户 A 可见。我们不希望这些加密列对另一组用户 B 可见。但是,这个用户集 B 应该能够看到其余的表的非加密列。
从各种文章和帖子中,我了解到 TDE 在列级别进行透明的加密和解密,但是如果上述基于用户/角色的加密,列级别粒度是否可行,则无法找到明确的信息。
我们可以使用 TDE 实现上述目标吗?
我不是 DBA,但根据我对 TDE 的理解,从任何查询来看,加密并不明显。它仅加密磁盘数据文件中的数据,因此如果直接从文件中转储,则无法读取。
一个好的 DBA 可能有更好的答案,但只是即兴发挥,这就是我的建议。
有两个敏感数据字段。一个是清晰的(尽管 TDE 可能是个好主意),另一个在某种程度上被混淆了。这些字段可以被规范化到一个单独的表中。不允许直接访问表,而是使用视图。该视图将被定义为:
create view TableName as
select ...,
case ROLE when 'A' then clear_field else obfuscated_field end as FieldName,
...
from SensitiveTable
join PossibleNormalizedTable on ... ;
您还需要视图上的触发器。如果只有 A 可以清楚地看到该字段,那么可能只有 A 可以插入和更新它。