2012-01-12 71 views
3

作爲安全性收緊練習,我將從Oracle數據庫用戶中刪除所有系統權限。現在,這個用戶只具有以下系統權限:Oracle安全 - 如何防止用戶從DROP TABLE自己的表中刪除

  • 創建會話
  • UNLIMITED TABLESPACE

我希望用戶將無法做任何DDL命令。但令我驚訝的是,即使用戶不能創建DROP TABLE,用戶也可以在自己的模式下使用DROP TABLE。

Oracle documentation表示DROP TABLE的先決條件是「該表必須位於您自己的模式中,或者您必須具有DROP ANY TABLE系統特權」。只是!!!我不明白Oracle的安全邏輯,但有什麼辦法可以阻止用戶刪除自己的表?

另一種方法是創建另一個用戶來運行應用程序和授予對象訪問權限,我想避免這種情況,因爲存在潛在的問題。

+2

你確實意識到無限制的TABLESPACE並不是一件好事情來授予用戶嗎?因爲它授予任何表空間的權限,包括SYSTEM和SYSAUX之類的應用程序不應該使用的權限。如果你要鎖定的東西,你應該明確地向用戶授予* named tablespace *的配額。 – APC 2012-01-12 17:36:59

+0

感謝您的建議APC。是的,UNLIMITED TABLESPACE對於生產系統來說不是最好的特權。但是所有的數據庫用戶都被授予了RESOURCE角色(Oracle默默授予UNLIMITED TABLESPACE而不告訴你)。現在我刪除了RESOURCE角色,我必須授予此特權以用於臨時目的。但稍後會進一步提供撥款額度。 – Tyn 2012-01-13 11:07:09

回答

11

用戶將始終有權刪除他們擁有的對象。您無法通過撤消權限來防止這種情況。

由於您正在考慮加強安全性,因此創建新用戶並授予該用戶所需的任何權限來操作數據都是正確答案。唯一應該以擁有應用程序對象的用戶身份登錄到生產數據庫的人員是DBA,並且只有當他們正在部署對模式的更改時纔會這樣做。其他人都應該以架構所有者以外的用戶身份登錄到數據庫。這就是說,如果正確的解決方案比你現在準備進行的工作多,那麼一個潛在的權宜之計就是在數據庫上創建一個DDL觸發器,如果​​針對對象發出了DROP在指定的模式中。這比適當的解決方案更安全。實施觸發器時,您可能會錯過某些東西,您或其他人可能會放棄或禁用觸發器並忘記重新啓用觸發器等等。由於您擁有的定製解決方案不會執行,因此安全性報告會變得更加困難在各種與安全相關的數據字典視圖中顯而易見,這可能會給審計人員帶來問題。

+4

+1基本架構所有者不應該能夠連接到生產數據庫。 – APC 2012-01-12 17:38:33

+1

如果您有大量SQL查詢當前未指定模式名稱,則可以通過爲新用戶爲舊模式中的所有對象創建同義詞來實現這一點,而這些同義詞是他們需要的。這樣就不需要改變查詢。 – ivanatpr 2012-01-12 18:30:08

+0

除非@invantpr考慮到創建和維護同義詞負載的麻煩。 – Ben 2012-01-12 18:41:48