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