2015-12-15 63 views
2

我目前正在使用Oracle數據庫速成版11g處理一些GRANT選項。考慮下面的小的代碼示例,其中一些用戶授予一些特權給其他用戶:在Oracle中撤銷特權

-- 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權限?

在此先感謝。

+0

誰執行REVOKE? – jarlh

+0

用戶A執行它。 A也是T的創造者,我相應地更新了這個問題。 –

+0

RESTRICT關鍵字不是Oracle數據庫的有效語法。 –

回答

2

撤銷對象權限

如果用戶已被授予權限給其他用戶或角色,則數據庫也撤消與其他用戶或角色的特權。


正確REVOKE語句是:

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

有一個在Oracle中沒有RESTRICTRESTRICT存在PostgresSQL,MariaDB等

但我認爲你的預期方式只是從用戶執行REVOKE Update ON T FROM C。 之後,沒有任何錯誤,用戶C和D無權更新T.

+0

你是對的,Oracle中沒有'RESTRICT'。所以你的意思是Oracle的默認行爲是「CASCADE」,對吧? –

+0

是的,我們可以說'CASCADE'是'WITH GRANT OPTION'授予的默認設置......另一個故事是授予系統特權'WITH ADMIN OPTION'。這些不會被撤銷。 – dcieslak