【问题标题】:Revoke Privileges in Oracle在 Oracle 中撤销权限
【发布时间】:2015-12-16 20:46:11
【问题描述】:

我目前正在使用 Oracle Database Express Edition 11g 处理一些GRANT 选项。考虑以下小代码示例,其中一些用户向其他用户授予一些权限:

-- User A
GRANT Select, Insert, Update, Delete ON T TO B,C WITH GRANT OPTION ;
-- User B
GRANT Select ON T TO C WITH GRANT OPTION ;
GRANT Insert ON T TO C ;
-- USer C
GRANT Select, Insert, Update ON T TO D ;

用户 A 是表 T 的创建者,执行以下REVOKE 操作。

现在执行REVOKE Update ON T FROM C。由于没有指定约束,REVOKE 操作要么取消,否则D 处的UPDATE 权限将被放弃,或者删除CD 的权限。

现在我的问题是:REVOKE 语句实际上是取消还是删除了CD 特权?或者换句话说,执行该撤销语句后的结果是CD仍然具有UPDATE权限吗?

提前致谢。

【问题讨论】:

  • 谁执行 REVOKE?
  • 用户 A 执行它。 A 也是 T 的创建者,我已经相应地更新了问题。
  • RESTRICT 关键字不是 Oracle 数据库的有效语法。
  • 你是对的,这个keywork在Oracle中是不存在的。我已经更新了这个问题。谢谢。

标签: sql oracle


【解决方案1】:

撤销对象权限

如果用户已将权限授予其他用户或角色,则数据库也会撤销其他用户或角色的权限。


正确的 REVOKE 语句是:

  REVOKE object_priv [(column1, column2..)] ON [schema.]object 
         FROM {user, | role, |PUBLIC} [CASCADE CONSTRAINTS] [FORCE] 

Oracle 中没有RESTRICTRESTRICT 存在于 PostgresSQL、MariaDB 等中。

但是我认为您的预期方式只是从 A 用户执行 REVOKE Update ON T FROM C。 之后没有任何错误,用户 C 和 D 没有更新 T 的权限。

【讨论】:

  • 你说得对,Oracle 中没有RESTRICT。所以你的意思是Oracle默认行为是CASCADE,对吧?
  • 是的,我们可以说CASCADEWITH GRANT OPTION 授予的默认值...另一个故事是授予系统权限WITH ADMIN OPTION。这些不会被撤销。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-13
  • 2021-03-03
  • 1970-01-01
  • 1970-01-01
  • 2016-06-05
  • 2016-02-02
  • 1970-01-01
相关资源
最近更新 更多