2011-11-29 94 views
3

我得到了一個「最佳實踐」的問題。我不是數據庫管理員,所以我對此沒有深入的瞭解,但我們的管理員正在推動我們構建的每個應用程序都需要創建一個新的數據庫用戶的過程(或者可能是每個用戶「喜歡「應用程序),以便他可以識別哪個用戶可能會吃掉資源。我理解這個決定背後的理論,但我想知道這是否是一種標準做法。在我看來,這將導致管理噩夢。例如,我們已經說50多個應用程序在內部運行,因此如果每個應用程序都綁定了不同的用戶,則不僅難以管理,而且會看到很多這些應用程序具有重疊的權限。識別要使用哪個用戶或者是否需要爲每個新應用程序創建新用戶變得麻煩。應該爲每個創建的應用程序分配一個新用戶嗎?

對此有何看法?

感謝。

+0

這對他的故障診斷能力有意義,但在應用方面沒有意義。爲什麼每個人都喜歡爲他們的應用實施SSO(單點登錄)功能? – Annjawn

回答

4

在一定程度上,這取決於你的意思是「應用程序」,因爲這是一個非常有彈性的術語。這還取決於您是否在討論創建新用戶,然後擁有特定應用程序的所有表,或者您是否在討論創建將用於登錄數據庫的新用戶,但這些用戶可以訪問到存儲在單獨的(並且可能更小的)用戶模式集合中的對象。

如果50歲以上的應用意味着你有50+自足集,由一般的獨立代碼50個分開帥哥訪問的表,創建單獨的用戶和不同的模式爲每個應用程序是非常合理的。它可以更容易地跟蹤哪些應用程序使用最多的磁盤空間,哪些應用程序正在創建性能問題等。它還使得鎖定每個帳戶的特權相對容易,因爲每個帳戶只需要訪問一個模式中的數據並且任何系統級權限授予都將針對特定的應用程序。另一方面,如果你有50多個應用程序碰到同一個數據庫,這些應用程序可能更像是一個更大的應用程序的組件,它們最終需要共享對各種對象的訪問。例如,如果您有一個應用程序讓人力資源輸入關於新員工,終止,辭職等的數據,另一個讓經理人員輸入員工評論的應用程序以及讓人力資源管理組織結構圖的第三個應用程序,那麼很可能所有這三個應用程序都需要訪問相同的基本表格集合,這可能會帶來一些例外情況。如果一個用戶擁有員工表,而另一個用戶擁有存儲組織層次結構的表,並且第三個用戶擁有存儲員工評論的表,則會非常惱人。在技​​術上構建這種系統是可能的,但管理同義詞,權限授予和構建過程可能會很快變得難以實現,除了使不同的應用程序在不同的應用程序中放入基本相同的數據時引入數據完整性問題的可能性更大因爲他們沒有意識到某個其他應用程序已經擁有該實體的表。

此外,你必須要考慮的事情,如應用程序如何部署。如果您擁有50個小型Java應用程序,例如連接到單個Oracle數據庫的2臺應用程序服務器,則有50個獨立的Oracle用戶將使連接池面臨挑戰。即使每個連接池只有5個數據庫連接,當您添加應用程序服務器或應用程序並隨着用戶負載增加而創建更多連接時,您仍然在討論50 * 5 * 2 = 500個數據庫連接。雖然支持數百或數千個連接到數據庫當然是可能的,但這種方法也會產生各種行政頭痛。

根據管理員的具體目標,可能還有更好的方法(代替或除了單獨的數據庫帳戶之外)。例如,Oracle提供DBMS_APPLICATION_INFO軟件包,應用程序可輕鬆使用該軟件包添加工具來顯示DBA數據庫會話當前正在執行的操作。這可以爲DBA提供更多細粒度的信息,而不僅僅是擁有單獨的數據庫帳戶。例如,如果您有三層應用程序,那麼在從連接池中取出連接以傳遞實際用戶名時,可以很方便地調用SET_CLIENT_INFO過程,並且可以定義當前應用程序,甚至可以定義當前應用程序的哪一部分用戶目前處於這個狀態。然後,將這些信息放置在DBA已經查詢的各種視圖中,並且使DBA能夠深入瞭解正在消耗大量資源的會話,以查看人類用戶是「JustinCave 「他目前在」InventoryManagement「應用程序的」QuarterlyReporting「模塊中,DBA可能從經驗或上下文中知道該模塊是否合理地發出長時間運行但仍然重要的查詢。即使您有可供查閱的應用程序日誌以獲取所有這些信息,使其可直接提供給DBA,也可以使故障排除更加高效,並幫助開發組和支持組之間的溝通更高效。例如,DBA可以告訴應用程序開發人員,某個特定應用程序的特定模塊似乎正在創建性能問題,或詢問爲什麼有人在月中的QuarterlyReporting模塊中,而不是簡單地說「InventoryManagement應用程序很慢「或者要求其他人通過應用程序日誌來了解特定時間點發生了什麼。

+0

感謝您的迴應,這有很大的幫助。 – RUtt

1

這是常見的做法既爲您的管理員,也爲你發揮你的應用程序中的讀/寫控制的精確水平的事實列舉的原因。通過僅爲您的應用程序提供他們需要的權限,可以限制潛在的安全違規。

@Rutt爲每個的applcation新用戶。儘管您的應用程序目前可能具有重疊權限,但不保證應用程序的權限不會改變。你正在用一種不受其他應用程序新興需求影響的方式對每一組權限進行打包。

+0

感謝您的回覆。沿着這條道路走下去,這是否意味着應該嘗試使用現有的用戶(如果存在的用戶已經具有所需的權限或者更簡單,每次只創建一個新用戶而不用擔心「重疊」權限? – RUtt

+0

請點擊我的答案旁邊的檢查,如果這解決了您的問題= D – BentOnCoding

相關問題