【问题标题】:Oracle, grant select on any table except 1Oracle,在除 1 之外的任何表上授予选择
【发布时间】:2019-04-13 02:12:12
【问题描述】:

我想让用户访问我的数据库中的所有表,但 1 个表除外,例如 'MY_SECRET_TABLE'。 我的解决方案目前不起作用...:

Grant select any table to public;
Grant select any table to MY_USER;
Revoke all on MY_SECRET_TABLE from MY_USER;

但我仍然可以访问该表。 我是不是做错了什么?

谢谢,

【问题讨论】:

  • 带有“仍然可以访问该表”,您的意思是它仍然显示在表列表中,还是您实际上可以从中选择?
  • 是的,我仍然可以“从 MY_SECRET_TABLE 中选择 *”
  • 当然你仍然可以从MY_SECRET_TABLE中选择,但是其他用户可以吗?
  • 是的,但对我来说这似乎很正常,因为我“将选择授予任何公共表”。我只想拒绝对 MY_USER 的访问

标签: sql oracle roles


【解决方案1】:

一种方法是通过 SQL 获取可执行授权

SELECT   'GRANT SELECT ON ' || object_name || ' TO USERNAME;'
FROM     user_objects
WHERE    object_type = 'TABLE' AND object_name != 'EXCEPT_THIS_TABLE'
ORDER BY object_name;

【讨论】:

    【解决方案2】:

    GRANT SELECT ON ANY TABLE 是一项非常强大的特权,因此您可能需要重新考虑您的策略。

    无论如何,我看到的唯一解决方案是使用行级安全性,以便除 MY_USER 之外的任何人都可以选择表,但不会返回任何行。

    听起来怎么样?

    【讨论】:

      猜你喜欢
      • 2015-11-25
      • 1970-01-01
      • 2016-08-17
      • 2019-01-07
      • 1970-01-01
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 2019-08-08
      相关资源
      最近更新 更多