我目前正在使用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
操作应取消,否则UPDATE
会有被遗弃的D
权限,或删除C
和D
的权限{1}}。
现在我的问题是:REVOKE
语句是否实际取消或删除了C
和D
权限?或者换句话说,执行撤销声明后,C
和D
仍然具有UPDATE
权限的结果是什么?
提前致谢。
答案 0 :(得分:3)
撤销对象权限
如果用户已将权限授予其他用户或角色,则数据库也会撤消其他用户或角色的权限。
正确的REVOKE语句是:
REVOKE object_priv [(column1, column2..)] ON [schema.]object
FROM {user, | role, |PUBLIC} [CASCADE CONSTRAINTS] [FORCE]
Oracle中没有RESTRICT
。 RESTRICT
存在于PostgresSQL,MariaDB等中。
但是我认为您的预期方式只是从用户执行REVOKE Update ON T FROM C
。
之后没有任何错误,用户C和D没有权限更新T.