執行程序表安全性

有數種方法可以產生 Showplan 執行計畫資訊。您可以使用 Transact-SQL SET 陳述式選項、SQL Server Profiler 事件類別,或您可以查詢動態管理函數 sys.dm_exec_query_plan。每種方法都需要不同的權限集合,以下章節會說明這些權限集合。如需如何檢查 Transact-SQL 批次之 SHOWPLAN 權限的詳細資訊,請參閱<SHOWPLAN 權限與 Transact-SQL 批次>。

[!附註]

使用 sp_dbcmptlevel 預存程序,將 SQL Server 資料庫相容性層級設定為 80 時,目前的 SHOWPLAN 權限仍適用。將相容性層級設定為 80,並不會產生 Microsoft SQL Server 2000 的 Showplan 權限行為。

關於 SHOWPLAN 權限

若要使用大部分 Showplan Transact-SQL SET 選項來產生執行計畫輸出,使用者必須:

  • 具有資料庫的 SHOWPLAN 權限,而這些資料庫中包含 Transact-SQL 陳述式中所參考的物件,例如檢視、預存程序或使用者自訂函數。

  • 具有可執行 Transact-SQL 陳述式本身的適當權限。

    安全性注意事項安全性注意事項

    具有 SHOWPLAN、ALTER TRACE 或 VIEW SERVER STATE 權限的使用者可以檢視執行程序表輸出中所擷取的查詢。這些查詢可能會包含類似密碼的敏感資訊。因此,我們建議您只能將這些權限授與給有權檢視敏感資訊的使用者,例如 db_owner 固定資料庫角色的成員或是 sysadmin 固定伺服器角色的成員。我們也建議您只將執行程序表檔案或是包含與執行程序表相關之事件的追蹤檔案儲存到使用 NTFS 檔案系統的位置,並建議您將存取權限制為有權檢視敏感資訊的使用者。

    例如,假設有以下查詢:

    SELECT COUNT(*)

    FROM table_1

    WHERE column_1 < 10

    若惡意使用者針對一組查詢產生如此範例的執行程序表輸出,並每次使用不同的常數取代值 "10",使用者可以透過讀取預估的資料列計數來推斷 table_1column_1 資料行值的約略資料分佈。

SHOWPLAN 權限是資料庫層級的權限,具有下列特色:

  • 只有下列使用者可以授與、拒絕或撤銷 SHOWPLAN 權限:

    • 系統管理員 (sysadmin) 固定伺服器角色的成員。依預設,此固定伺服器角色的所有成員,都擁有伺服器上所有資料庫的 SHOWPLAN 權限。

    • 資料庫的 dbcreator 固定伺服器角色的成員 (建立資料庫並因而擁有權限)。依預設,此固定伺服器角色的所有成員,在他們建立並因而擁有的資料庫上都有 SHOWPLAN 權限。

    • 資料庫的 db_owners 固定資料庫角色的成員 (這些成員擁有資料庫)。依預設,此固定資料庫角色的所有成員,在他們擁有的資料庫上都有 SHOWPLAN 權限。

  • 支援擁有權鏈結。當擁有權鏈結中斷時,會在發生中斷的節點上再次檢查權限。不過,因為 SHOWPLAN 權限是資料庫層級權限,所以只有在查詢參考二或多個資料庫中的物件時,才會進行權限檢查。如需有關擁有權鏈結的詳細資訊,請參閱<擁有權鏈結>。

如需用於授與、拒絕或撤銷 SHOWPLAN 權限的語法之詳細資訊,請參閱<授與、拒絕、撤銷 SHOWPLAN 權限的語法>。

範例

如果 User1 具有 CREATE TABLE、INSERT 及 SELECT 權限,並且在資料庫 D 中建立資料表 T (他是資料表擁有者)、將資料列插入資料表,然後在資料表上寫入 SELECT 查詢,則可順利執行查詢。不過,除非授與 User1 資料庫 D 的 SHOWPLAN 權限,否則他無法產生 Showplan。

警告

在上述範例中,假設資料庫 D 包含檢視 V,而 User1 對其具有 SELECT 權限。將 SHOWPLAN 權限 D 授與 User1 之後,雖然該使用者並未擁有 V,他仍能在設定為 V 的查詢上產生執行程序表。此執行程序表可讓該使用者看到 V 的檢視定義,包括 V 作為基礎的資料表與檢視。不過,如果 V 包含的物件 (例如資料表) 是由 User1 所擁有且位於另一個資料庫 D2 上,但 User1 不是 D2 的擁有者,此時便會檢查 D2 的 SHOWPLAN 權限,並需要這個權限。

使用 Showplan SET 選項所需的權限

下表列出使用各種 Showplan SET 陳述式選項所需的權限:

執行程序表 SET 選項

所需權限

SET SHOWPLAN_XML ON

SET SHOWPLAN_ALL ON

SET SHOWPLAN_TEXT ON

對於 SELECT、INSERT、UPDATE、DELETE、EXEC stored_prodedure 與 EXEC user_defined_function 陳述式,需要下列權限才能產生執行程序表:

  • 執行 Transact-SQL 陳述式的適當權限。

  • 所有資料庫 (內含 Transact-SQL 陳述式所參考的物件,例如資料表、檢視等等) 的 SHOWPLAN 權限。

對於其他陳述式 (例如:DDL、USE database_name、SET、DECLARE、動態 Transact-SQL 等),只需要執行 Transact-SQL 陳述式的適當權限即可。如需詳細資訊,請參閱<SHOWPLAN 權限與 Transact-SQL 批次>。

SET STATISTICS XML ON

SET STATISTICS PROFILE ON

  • 執行 Transact-SQL 陳述式的適當權限。

  • 所有資料庫 (內含 Transact-SQL 陳述式所參考的物件) 的 SHOWPLAN 權限。

若是不會產生 STATISTICS PROFILE 或 STATISTICS XML 結果集的 Transact-SQL 陳述式,則只需執行 Transact-SQL 陳述式的適當權限。若是會產生 STATISTICS PROFILE 或 STATISTICS XML 結果集的 Transact-SQL 陳述式,針對 Transact-SQL 陳述式執行權限及 SHOWPLAN 權限的檢查都必須成功,否則 Transact-SQL 陳述式的執行會中止,也不會產生任何 Showplan 資訊。如需何種 Transact-SQL 陳述式會產生 Showplan 資訊的詳細資訊,請參閱<產生顯示計畫的 Transact-SQL 陳述式>。

SET STATISTICS TIME

SET STATISTICS IO

  • 執行 Transact-SQL 陳述式的適當權限。

這些 SET 陳述式選項都不會檢查 SHOWPLAN 權限或需要此權限。

何時會檢查 SHOWPLAN 權限?

當執行 Transact-SQL 陳述式或批次,並產生 Showplan 資訊時,就會檢查 SHOWPLAN 權限。Showplan SET 選項設定為 ON 時,則不會進行檢查。

[!附註]

Transact-SQL 批次的內容資料庫是使用 USE <database_name> 陳述式所指定。在 USE <database_name> 陳述式與內容資料庫上,不會檢查 SHOWPLAN 權限。

如需 Showplan SET 陳述式選項的詳細資訊,請參閱下列主題:

使用 SQL Server Management Studio 顯示圖形執行計畫所需的權限

下表列出在 SQL Server Management Studio 中顯示圖形執行計畫所需的權限:

Management Studio 執行計畫選項

所需權限

顯示估計執行計畫

需要使用 SHOWPLAN_XML SET 陳述式選項所需的相同權限

包括實際執行計畫

需要使用 STATISTICS XML SET 陳述式選項所需的相同權限

如需詳細資訊,請參閱<顯示圖形執行計畫 (SQL Server Management Studio)>。

使用 SQL Server Profiler 事件類別顯示執行計畫所需的權限

若要使用 SQL Server Profiler 事件類別顯示執行計畫,使用者必須是系統管理員 (sysadmin) 固定伺服器角色的成員,或具有 ALTER TRACE 權限。既不會檢查也不需要 SHOWPLAN 權限。

如需詳細資訊,請參閱<使用 SQL Server Profiler 事件類別來顯示執行計畫>。

使用 sys.dm_exec_query_plan 動態管理函數顯示執行計畫所需的權限

若要使用 sys.dm_exec_query_plan 動態管理函數以顯示執行計畫,只需授與使用者 VIEW SERVER STATE 權限。

如需詳細資訊,請參閱<sys.dm_exec_query_plan (Transact-SQL)>。

請參閱

其他資源