一尘不染

撤消Oracle中的特权

sql

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

-- 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操作要么取消,否则将有一个废弃UPDATE的特权D,或同时删除的权限CD

现在我的问题是:该REVOKE语句是否实际上已取消或同时删除CD特权?或者换句话说,就是执行该revoke语句,无论之后的结果C,并D仍然有UPDATE特权或不?

提前致谢。


阅读 154

收藏
2021-03-08

共1个答案

一尘不染

撤消对象特权

如果用户已将特权授予其他用户或角色,则数据库还将撤消那些其他用户或角色的特权。


正确的REVOKE语句是:

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

RESTRICTOracle中没有。将RESTRICT在PostgreSQL中,MariaDB的,等存在

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

2021-03-08