2008-09-27 139 views

回答

2

您是否問爲什麼用戶需要特定的特權(即CREATE TABLE,CREATE PROCEDURE等)才能在自己的模式中創建特定類型的對象?

如果是這樣,自然的答案就是良好的安全性從最小特權的原則開始 - 也就是說,用戶只應擁有他們真正需要完成工作而不再需要的特權。數據庫管理員經常想要爲生產數據庫中的用戶創建只讀帳戶(例如,業務分析員經常需要執行不同類型的臨時報告,開發人員可能需要訪問來解決某些類型的問題,等等)。如果用戶總是能夠在自己的模式中創建對象,那麼這些只讀用戶會突然能夠將代碼部署到生產數據庫,而無需通過更改控制或甚至不必進行任何測試。這通常會導致代碼在基本上相同的情況下氾濫(即十幾名分析師每個人都有自己的模式計算銷售稅的過程),但每個分析都有自己獨特的簽名,邏輯,要求,假設等。天堂禁止其中一位分析師被解僱,因爲DBA自然會刪除他們的賬戶,只是發現一些重要的報告依賴於只存在於該分析師模式中的代碼。

1

我不能給你「官方」的答案,但我可以刺探它背後的推理。在我工作的項目上,Oracle開發人員將觸發器和包部署到數據庫模式中。但是我們有其他Java開發人員和測試人員等團隊。一旦模式遷移到測試和生產環境中,我們不希望測試人員或最終用戶應用程序能夠隨意修改與之關聯的觸發器和包該架構,因爲這可能會使他們正在進行的任何測試的完整性失效(或導致生產系統上的更嚴重問題)。

因此,在測試/生產環境中,您希望測試人員,Java開發人員和最終用戶應用程序能夠讀取數據並將其寫入架構,但不能修改包含基準的觸發器和程序包碼。

0

爲什麼用戶需要特權在 自己的模式來創建包和 觸發 他們不知道。

他們自己的模式意味着通過username.object 所有用戶需要在他們自己的模式創建觸發器定義的所有權(或命名空間)是: 在自己的架構 表中創建觸發器的特權

所有用戶需要在他們自己的模式創建一個包是: 創建包特權

如果用戶希望在另一個架構或引用其他對象來創建對象,或需要存儲在表空間中,然後他們將需要許可對這些外來物體。