Oracle如何隐藏某些列不对特定用户可见?

7
场景:一个包含敏感用户数据的Oracle 11g数据库,如果向错误方披露可能会导致法律责任。 期望效果:仅特定IP地址连接的特定用户可以看到包含此敏感用户数据的列。
我不确定隐藏列虚拟列是否是实现此目的的正确方式。似乎细粒度访问控制可能有所帮助。我不确定最佳解决方案是什么。按IP限制可能在监听器级别完成? 问题: 如何限制列的可见性,使其仅对特定用户可用?所有其他用户都永远看不到该列,即使执行“DESC TABLE_WITH_SENSITIVE_DATA”也是如此。
感谢任何提示。

虚拟列完全不同。它用于在表内直接拥有一个计算列,而不是使用视图。 - Plouf
FGAC可以隐藏列数据(或整行),但不能隐藏列本身,也不能在“DESC”中隐藏它。您必须拥有视图才能完全隐藏一列,然后仅授予用户对该视图的访问权限。 - DazzaL
当你说“仅特定用户,从特定IP连接”时,你真的想让数据库强制执行连接IP吗?这一点你是否咨询过网络管理员? - APC
另一个问题:您是否信任您的DBAs或者您想要保护数据免受他们(以及类似的高权限用户)的干扰? - APC
我认为我对一个相关问题的回答已经涵盖了所有基础内容:https://dev59.com/wEvSa4cB1Zd3GeqPht3_#2230413 - APC
感谢APC的反馈,我们不想在主机层面(例如使用防火墙规则或路由器ACL)强制执行IP限制,而是在TNS侦听器层面进行。在MySQL中,这很容易实现,在Oracle中也应该有一种方法。这可能应该是一个单独的问题。 - emx
3个回答

10

最简单的方法是在表上创建一个视图,该视图不包含所有列。不要授予对表的select权限,而只授予对视图的权限。


1
这是一个如此简单而优雅的解决方案,我有点感觉自己错过了。 - emx

4

1
阅读了一些关于VPD和FGAC的内容后,我们清楚地认识到这可以在一定程度上用于强制数据隐藏,但是对于我们的目的来说,使用这些技术可能过于复杂(并且潜在成本高昂)。 - emx

1
你能修改角色和创建视图吗?也许你可以创建两个不同的视图,并授予两个不同角色对该表的访问权限。所有受限制不能看到敏感数据的用户都属于“受限制”角色,而其他用户则可以访问“不受限制”角色。您需要向每个视图授予适当角色的特权。
需要注意的是,有关视图关联的底层数据更新存在限制。正如此处所解释的那样,包含集合运算符、聚合和GROUP BY DISTINCT以及连接的视图是不可修改的。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接