如何防止數據庫收縮
我們有一個 3° 方應用程序,其中一個應用程序使用者需要成為 SQL Server 系統上數據庫(不是我的選擇)的 db_owner。所有儲存過程都在此數據庫中加密。在某些時候,他們會縮小此應用程序中的數據庫文件,而且他們每天都在這樣做。我想防止這種情況發生,我正在尋找是否有辦法做到這一點:
- 在某處拒絕許可
- 伺服器或數據庫觸發器
- 別的東西
有人能幫我嗎
我們有一個應用程序,應用程序使用者需要是數據庫上的 db_owner
如果這個應用程序是“內部”編寫的,那麼就反擊 - 努力 - 讓他們證明為什麼需要這樣做。
作為數據庫所有者執行應用程序,您不妨將數據庫交還給開發團隊,因為無論您是否知情和/或同意,他們幾乎可以為所欲為。
如果他們要打破它,讓他們接受高炮並修復它。
如果這個應用程序是來自第三方供應商的包(這非常常見),那麼你就有點卡住了。他們可以對應用程序進行編碼以執行任何他們想做的事情,而且您對此無能為力。
在某些時候,他們會縮小此應用程序中的數據庫文件,而且他們每天都在這樣做。我想防止這種情況…
為什麼?
收縮操作是否會導致操作問題,即給使用者/業務帶來困難?如果是這樣,那麼這是讓他們停止這樣做的一個非常有力的論據。
另一個較小的論點可能是“縮小”的數據文件是否很快恢復到以前的大小。如果是這樣,那麼縮小是浪費時間,並且可能會在數據文件再次增長時導致性能問題,因為增長數據文件總是比僅使用已經存在的可用空間要慢。
我唯一能想到的是在每個表上創建一個刪除觸發器以引發異常或軟刪除(例如,將已刪除的列設置為 true)。我認為沒有辦法撤銷對模式所有者創建的對象的特權——我無法讓它在 Oracle 上工作。如果無法刪除行,則數據庫文件不會縮小。當然,行不會被刪除,這可能會給應用程序帶來其他問題。
更大的問題是應用程序作為模式所有者執行。這只是一種糟糕的安全做法,因為它違反了最小特權原則。