方案:包含一些敏感用户数据的Oracle 11g数据库,如果向错误方披露,可能会导致法律责任。
期望的效果:只有从某个IP连接的特定用户才能看到包含此敏感用户数据的列
我不确定隐藏列或虚拟列是否是正确的方法。似乎细粒度访问控制可能有所帮助。我不确定什么是最好的解决方案。 IP的限制可能是在听众层面完成的?
问题: 我们如何限制列的可见性,使其仅适用于特定用户?所有其他用户永远不会看到该列,即使在执行“DESC TABLE_WITH_SENSITIVE_DATA”
时也是如此感谢您的任何提示。
答案 0 :(得分:6)
最简单的方法是在表上创建一个不包含所有列的视图。不要在表上授予select,而只在视图上授予。
答案 1 :(得分:4)
“正确”的方法是使用细粒度访问控制(虚拟专用数据库),如果不满足某些条件,它可以用NULL替换列的内容。
请参阅此处的示例:http://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#autoId17
如果你感觉既贫穷又熟练,你可以自己建立这种功能。
答案 2 :(得分:1)
您是否能够修改角色并创建视图?也许您可以创建两个单独的视图,并为该表授予对两个不同角色的访问权限。限制查看敏感数据的所有用户都属于“受限制”角色,而其他用户可以访问“不受限制”角色。您需要将每个视图的权限授予适当的角色。
请务必注意,更新与视图关联的基础数据存在限制。正如here所解释的那样,包含集合运算符,聚合和GROUP BY DISTINCT以及连接且不可修改的视图。