Sql-Server

在向開發人員授予 VIEW SERVER STATE 和 VIEW DEFINITION 之前有什麼需要考慮的嗎?

  • May 10, 2021

我想在生產 SQL Server 上向 Developers 組授予以下權限:

VIEW SERVER STATE
VIEW DEFINITION (server level)

這樣做是為了讓他們能夠查詢一些動態管理視圖和函式,查看性能數據,以及查看所有儲存過程和函式的程式碼(定義)

是否有任何缺點或任何原因在某些情況下不好?

授予上述權限的任何可能的不良副作用?

第二個問題 - 如果我VIEW DEFINITION在 master 數據庫中授予,這使得它成為伺服器級別並且不必在任何使用者數據庫中授予?與SHOWPLAN?

對於VIEW DEFINITION/VIEW ANY DEFINITION你可能沒問題,因為開發人員可能已經可以訪問原始碼。

因為VIEW SERVER STATE,這確實控制了對廣泛功能的訪問,因此您在授予此權限時需要更加謹慎和謹慎。主要考慮因素是:*訪問需要多大程度的開放性和限制性?*問題是沒有粒度VIEW SERVER STATE:要麼全部要麼沒有。

開發人員是否需要完全的臨時查詢訪問權限,或者他們只是需要能夠執行您將提供的一些預定義查詢的能力?如果他們需要完全的臨時查詢訪問權限,那麼您可能需要授予他們VIEW SERVER STATE。但是,如果您可以提供有限數量的查詢,那麼您不需要授予他們任何東西(除了EXECUTE包含正在提供的查詢的儲存過程的權限之外)。在這種情況下,您將授予儲存過程VIEW SERVER STATE權限(和/或ALTER TRACE允許)。開發人員只能通過儲存過程使用這些提升​​的權限。而且,如果任何開發人員試圖偷偷摸摸地更新其中一個儲存過程以以另一種方式使用提升的權限,那麼任何更新的儲存過程都會自動失去提升的權限。

這一切都可以通過Module Signing來實現。例如,請參閱我對創建數據庫的儲存過程的執行權限的回答(也在 DBA.StackExchange 上)。

一旦你有了這個安全機制(即證書和基於證書的登錄和/或使用者,取決於你需要授予的權限範圍),它就可以應用於任意數量的儲存過程、觸發器、TVF (內聯除外)和 UDF。如果需要第二個權限,那麼如果始終需要該權限以及初始權限,只需將其添加到相同的基於證書的主體(登錄和/或使用者)。如果僅在某些情況下需要第二個權限,則從第二個證書創建另一個證書和另一個基於證書的主體,將另一個權限分配給基於第二個證書的主體,然後執行ADD SIGNATURE再次,在需要其他權限的對像上使用第二個證書(您可以向對象添加多個簽名,從而組合權限)。

引用自:https://dba.stackexchange.com/questions/290112