收回Oracle中的权限

3

我目前正在处理使用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操作? - jarlh
用户A执行此操作。A也是T的创建者,我已相应更新了问题。 - Patrick Weiß
RESTRICT关键字在Oracle数据库中不是有效的语法。 - Jeffrey Kemp
你说得对,这个关键字在Oracle中不存在。我已经更新了问题。谢谢。 - Patrick Weiß
1个回答

3

撤销对象权限

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


正确的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,对吗? - Patrick Weiß
1
是的,我们可以说CASCADE是默认的WITH GRANT OPTION授权...另一个故事是授予系统特权WITH ADMIN OPTION。这些不会被撤销。 - dcieslak

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接