【问题标题】:Oracle select grant on table which already has all grantsOracle 在已经拥有所有授权的表上选择授权
【发布时间】:2021-10-21 22:39:06
【问题描述】:

我有表 table1,我想将 SELECT 到 table1 授予用户 user1。

我将使用下面的查询来授予 SELECT。

grant select on table1 to user1;

但在生产中,我不知道 user1 在 table1 上的所有授权。所以如果 user1 已经在 table1 上拥有 SELECT、INSERT、UPDATE、DELETE、REFERENCES、ALTER 和 INDEX 授权并且只执行 SELECT 授权会发生什么。

【问题讨论】:

  • 正如您所料,SELECT 授权将添加到任何现有授权中。
  • "如果您授予用户特权,那么数据库会将特权添加到用户的特权域。" -- 请参阅以下文档了解您的数据库版本(这个是 10g,但仍然适用):docs.oracle.com/cd/B19306_01/server.102/b14200/…

标签: sql select oracle11g grant


【解决方案1】:

SELECT 授权(如果当前不存在)将添加到该用户的任何现有授权中。

“如果您授予用户特权,则数据库将该特权添加到用户的特权域。”

请参阅以下文档以了解您的数据库版本(此版本为 10g,但仍然适用):

Applicable Oracle 10g documentation on grants

【讨论】:

    【解决方案2】:

    如果 user1 已经在 table1 上拥有 SELECT、INSERT、(...) 授权并且只执行 SELECT 授权会发生什么。

    什么都不会发生。

    • GRANT 不能用作开关(即打开特权 - 另一个 GRANT 将其关闭 - 另一个将其打开...... - 不)。
      • 如果您想撤销特权,您可以这样做:REVOKE SELECT ON some_table FROM my_user;
    • 它会被“双重授予”(这样您就必须撤销它两次?) - 不,它不会

    因此,如果用户已被授予对该表的SELECT 权限,则再次授予是无用的,但不会造成任何伤害。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 2018-06-15
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 2011-04-21
      相关资源
      最近更新 更多