2013-03-11 25 views
1

我有一個系統,允許用戶登錄並構建查詢以針對SQL 2012服務器運行。系統在允許的查詢中需要非常自由,所以我只是依靠SQL授予來阻止用戶執行他們不應該做的事情。防止來自非特權用戶的SQL查詢阻止關鍵進程

我擔心像priority inversion這樣的東西仍然可能發生。說非特權用戶登錄,發現一個表濫用並在其上運行十幾個外部連接。或者只是開始一個交易,並從不關閉它。

我想確保非特權用戶無法阻止來自更多特權用戶的關鍵進程。我正在考慮使用Resource Governor來做到這一點,但我不確定這是否是我可能需要擔心的其他問題的最佳方式。

確保來自非特權用戶的查詢無法阻止關鍵流程的最佳方法是什麼?

+0

您可以限制命令超時。是否有任何有效的使用反式反應?如果不是,則不允許任何帶有反式查詢的查詢。與光標相同。那麼可重複閱讀怎麼樣 - 可以做一些真正的併發損害 - 他們需要嗎?如果你讓用戶TSQL通過,你所能做的就是限制你的暴露。 – Paparazzi 2013-03-11 15:46:19

+0

@Blam是的,我曾考慮過命令超時,但這是客戶端功能。我更喜歡服務器上的東西。我不認爲有任何方法可以防止用戶直接設置隔離級別。 – 2013-03-11 15:54:53

回答

2

資源調控器只能限制任意用戶(內存,CPU)的資源。它不能防止優先級倒置,並且如果發生優先級倒置,資源調控器只會使其持續更長時間。

如果用戶可能導致阻塞,那麼您必須將用戶移動到安全的操場(例如備用副本),或者您必須actively monitor for blockage。沒有太多的迴旋餘地。 如果這些用戶只執行R/O操作,那麼您可以嘗試使用快照隔離來避免阻塞。

+0

+1鏈接。我從來不知道這個功能存在。我也喜歡副本數據庫的建議,但我不確定這是否適用於我的情況。我將不得不再研究一下這些選項。 – 2013-03-11 15:57:52

0

我們已經遇到類似的需求,最終轉向SQL Server 2008故障轉移框中的無特權用戶的數據庫快照。這給了我們一些優先隔離,讓我們更好地使用我們的故障轉移硬件。

既然我們在SQL Server 2012上,我們正在研究AlwaysOn。這並不完美,但如果你有一個高可用性環境,這是值得考慮的。本頁底部提供AlwaysOn白皮書:http://www.microsoft.com/en-us/sqlserver/solutions-technologies/mission-critical-operations/high-availability.aspx