【问题标题】:Oracle hide columns from certain usersOracle 对某些用户隐藏列
【发布时间】:2013-02-13 12:32:22
【问题描述】:

场景:Oracle 11g 数据库包含一些敏感的用户数据,如果泄露给错误的一方可能会导致法律责任。

想要的效果:只有某个用户,从某个IP连接,才能看到包含此​​敏感用户数据的列

我不确定 隐藏列虚拟列 是否是正确的方法。 细粒度的访问控制似乎可以提供帮助。我不确定什么是最好的解决方案。 IP的限制大概是在监听器级别完成的吧?

问题: 我们如何限制列的可见性,使其仅对特定用户可用?所有其他用户都不会看到该列,即使在执行“DESC TABLE_WITH_SENSITIVE_DATA”时也不会

感谢您的任何提示。

【问题讨论】:

  • 虚拟列完全不是这样。它用于在表中直接计算列,而不是使用视图
  • FGAC 可以隐藏 DATA 列(或整行),但不能隐藏列本身,也不能将其隐藏在 DESC 中。您必须拥有视图才能完全隐藏列,然后只授予用户访问视图的权限。
  • 当您说“只有某个用户,从某个 IP 连接”时,您真的希望数据库强制执行连接 IP 吗?您是否就此咨询过您的网络管理员?
  • 另一个问题:您信任您的 DBA 还是希望对他们(以及类似的高级用户)屏蔽数据?
  • 我认为我对相关问题的回答涵盖了所有基础:stackoverflow.com/a/2230413/146325

标签: oracle security privacy tns


【解决方案1】:

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

【讨论】:

  • 这是一个如此简单而优雅的解决方案,让我觉得错过它有点愚蠢。
【解决方案2】:

执行此操作的“正确”方法是使用细粒度访问控制(虚拟专用数据库),如果不满足某些条件,它可以将列的内容替换为 NULL。

在此处查看示例:http://docs.oracle.com/cd/B28359_01/network.111/b28531/vpd.htm#autoId17

如果你觉得既贫穷又熟练,你可能可以自己构建这种功能。

【讨论】:

  • 在阅读了一些关于 VPD 和 FGAC 的内容后,很明显这可以用于在某种程度上强制执行数据隐藏,但是将这些技术用于我们的目的可能过于复杂(并且可能成本高昂) .
【解决方案3】:

您是否能够修改角色和创建视图?也许您可以创建两个单独的视图并授予对该表的两个不同角色的访问权限。所有被限制查看敏感数据的用户都属于“受限”角色,而其他用户将有权访问“不受限制”角色。您需要将每个视图的权限授予相应的角色。

请务必注意,更新与视图关联的基础数据存在限制。正如here 所解释的那样,包含集合运算符、聚合和 GROUP BY DISTINCT 和连接的视图是不可修改的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-01
    相关资源
    最近更新 更多