Aspetti di sicurezza relativi a Showplan

Esistono diverse modi di generare informazioni sui piani di esecuzione Showplan. È possibile utilizzare le opzioni dell'istruzione SET di Transact-SQL, le classi di evento di SQL Server Profiler oppure è possibile eseguire una query sulla funzione a gestione dinamica sys.dm_exec_query_plan. Ognuno di essi richiede un diverso set di autorizzazioni, come descritto nelle sezioni seguenti. Per ulteriori informazioni sulla modalità di verifica dell'autorizzazione SHOWPLAN per i batch di comandi Transact-SQL, vedere Autorizzazione SHOWPLAN e batch di comandi Transact-SQL.

Nota

Quando il livello di compatibilità di un database SQL Server viene impostato sul valore 80 utilizzando la stored procedure sp_dbcmptlevel, viene comunque applicata l'autorizzazione SHOWPLAN corrente. L'impostazione del livello di compatibilità sul valore 80 non ha l'effetto osservabile in Microsoft SQL Server 2000 sulle autorizzazioni Showplan.

Informazioni sull'autorizzazione SHOWPLAN

Per produrre l'output di piani di esecuzioni utilizzando la maggior parte delle opzioni dell'istruzione SET di Transact-SQL relative a Showplan, gli utenti devono avere le autorizzazioni seguenti:

  • Autorizzazione SHOWPLAN sui database contenenti oggetti a cui fa riferimento l'istruzione Transact-SQL, quali viste, stored procedure o funzioni definite dall'utente.

  • Autorizzazione appropriata per l'esecuzione dell'istruzione Transact-SQL specifica.

    Nota sulla sicurezzaNota sulla sicurezza

    Gli utenti che dispongono dell'autorizzazione SHOWPLAN, ALTER TRACE o VIEW SERVER STATE possono visualizzare le query acquisite nell'output di Showplan. Poiché tali query possono contenere informazioni riservate, ad esempio password, è consigliabile concedere tali autorizzazioni solo agli utenti che possono visualizzare le informazioni riservate, ad esempio ai membri del ruolo predefinito del database db_owner oppure ai membri del ruolo predefinito del server sysadmin. È inoltre consigliabile salvare file Showplan o file di traccia che contengono eventi correlati a Showplan solo in una posizione che utilizza il file system NTFS e limitare l'accesso agli utenti autorizzati a visualizzare le informazioni riservate.

    Si consideri ad esempio la query seguente:

    SELECT COUNT(*)

    FROM table_1

    WHERE column_1 < 10

    Se un utente malintenzionato genera output Showplan per un set di query come nell'esempio e sostituisce il valore "10" nel predicato con costanti diverse ogni volta, l'utente potrà derivare una distribuzione approssimativa dei dati dei valori delle colonne per column_1 in table_1 dai conteggi stimati delle righe.

L'autorizzazione SHOWPLAN è un'autorizzazione a livello di database che:

  • Può essere concessa, negata o revocata solo dai seguenti utenti:

    • Membri del ruolo predefinito del server sysadmin. Per impostazione predefinita, tutti i membri di questo ruolo predefinito del server hanno l'autorizzazione SHOWPLAN su tutti i database del server.

    • Membri del ruolo predefinito del server dbcreator sui database da essi creati e di cui, pertanto, sono proprietari. Per impostazione predefinita, tutti i membri di questo ruolo predefinito del server hanno l'autorizzazione SHOWPLAN sui database da essi creati e di cui, pertanto, sono proprietari.

    • Membri del ruolo predefinito del database db_owners per i database di cui sono proprietari. Per impostazione predefinita, tutti i membri di questo ruolo predefinito del database hanno l'autorizzazione SHOWPLAN sui database di cui sono proprietari.

  • Supporta il concatenamento della proprietà. Se la catena di proprietà viene interrotta, l'autorizzazione viene nuovamente verificata al livello del nodo in cui si è verificata l'interruzione. Dato però che l'autorizzazione SHOWPLAN è un'autorizzazione a livello di database, tale verifica viene eseguita solo quando le query fanno riferimento a oggetti presenti in due o più database. Per ulteriori informazioni sul concatenamento della proprietà, vedere Catene di proprietà.

Per informazioni sulla sintassi utilizzata per concedere, negare o revocare l'autorizzazione SHOWPLAN, vedere Sintassi per concedere, negare e revocare l'autorizzazione SHOWPLAN.

Esempio

Se User1, dotato delle autorizzazioni CREATE TABLE, INSERT e SELECT, crea la tabella T (essendone quindi il proprietario) nel database D, inserisce righe nella tabella e quindi scrive una query SELECT sulla tabella, la query viene eseguita con esito positivo. User1 non potrà tuttavia generare uno Showplan finché non gli verrà concessa l'autorizzazione SHOWPLAN sul database D.

Avviso

Nell'esempio precedente, si supponga che il database D contenga la vista V per la quale User1 ha l'autorizzazione SELECT. Dopo che a User1 è stata concessa l'autorizzazione SHOWPLAN per D, sebbene non sia proprietario di V, può comunque generare uno Showplan in una query eseguita su V. Questo Showplan consente all'utente di consultare la definizione della vista per V, incluse le tabelle e le viste sulle quali è basato V. Se tuttavia V contiene un oggetto, come ad esempio una tabella, di cui User1 è proprietario e che è memorizzato in un database differente D2, e se allo stesso tempo User1 non è proprietario di D2, l'autorizzazione SHOWPLAN su D2 sarà necessaria e verrà verificata.

Autorizzazioni necessarie per utilizzare le opzioni dell'istruzione SET relative a Showplan

Nella tabella seguente sono elencate le autorizzazioni necessarie per utilizzare le varie opzioni dell'istruzione SET relative a Showplan:

Opzioni SET relative a Showplan

Autorizzazioni necessarie

SET SHOWPLAN_XML ON

SET SHOWPLAN_ALL ON

SET SHOWPLAN_TEXT ON

Per le istruzioni SELECT, INSERT, UPDATE, DELETE, EXEC stored_prodedure e EXEC user_defined_function, sono necessarie le autorizzazioni seguenti per produrre uno Showplan:

  • Autorizzazioni appropriate per l'esecuzione delle istruzioni Transact-SQL.

  • Autorizzazione SHOWPLAN su tutti i database contenenti oggetti a cui fanno riferimento le istruzioni Transact-SQL, ad esempio tabelle, viste e così via.

Per tutte le altre istruzioni, ad esempio DDL, USE database_name, SET, DECLARE, Transact-SQL dinamico e così via, sono necessarie solo le autorizzazioni appropriate per l'esecuzione dell'istruzione Transact-SQL. Per ulteriori informazioni, vedere Autorizzazione SHOWPLAN e batch di comandi Transact-SQL.

SET STATISTICS XML ON

SET STATISTICS PROFILE ON

  • Autorizzazioni appropriate per l'esecuzione delle istruzioni Transact-SQL.

  • Autorizzazione SHOWPLAN in tutti i database contenenti gli oggetti a cui viene fatto riferimento dalle istruzioni Transact-SQL.

Per le istruzioni Transact-SQL che non restituiscono set di risultati STATISTICS PROFILE o STATISTICS XML, sono necessarie solo le autorizzazioni per eseguire le istruzioni Transact-SQL. Per le istruzioni Transact-SQL che restituiscono set di risultati STATISTICS PROFILE o STATISTICS XML, devono avere esito positivo sia i controlli per l'autorizzazione di esecuzione delle istruzioni Transact-SQL che quelli per l'autorizzazione SHOWPLAN. In caso contrario, viene interrotta l'esecuzione delle istruzioni Transact-SQL e non vengono generate le informazioni Showplan. Per ulteriori informazioni su quali istruzioni Transact-SQL producono informazioni Showplan, vedere Istruzioni Transact-SQL che generano Showplan.

SET STATISTICS TIME

SET STATISTICS IO

  • Autorizzazioni appropriate per l'esecuzione delle istruzioni Transact-SQL.

Nessuna di queste opzioni dell'istruzione SET necessita dell'autorizzazione SHOWPLAN o ne richiede verifica.

Situazioni in cui viene verificata l'autorizzazione SHOWPLAN

L'autorizzazione SHOWPLAN viene verificata quando viene eseguita un'istruzione o un batch di comandi Transact-SQL e vengono generate informazioni Showplan. Quando un'opzione dell'istruzione SET relativa a Showplan è impostata su ON, la verifica non viene eseguita.

Nota

Il database di contesto per un batch Transact-SQL viene impostato utilizzando un'istruzione USE <database_name>. L'autorizzazione SHOWPLAN non viene verificata con le istruzioni USE <database_name> e sul database di contesto.

Per ulteriori informazioni sulle opzioni dell'istruzione SET relative a Showplan, vedere gli argomenti seguenti:

Autorizzazioni necessarie per visualizzare piani di esecuzione grafici utilizzando SQL Server Management Studio

Nella tabella seguente sono elencate le autorizzazioni necessarie per visualizzare piani di esecuzione grafici in SQL Server Management Studio:

Opzione piano di esecuzione SQL Server Management Studio

Autorizzazioni necessarie

Visualizza piano di esecuzione stimato

Richiede le stesse autorizzazioni necessarie per utilizzare l'opzione SHOWPLAN_XML dell'istruzione SET

Includi piano di esecuzione effettivo

Richiede le stesse autorizzazioni necessarie per utilizzare l'opzione STATISTICS XML dell'istruzione SET

Per ulteriori informazioni, vedere Visualizzazione dei piani di esecuzione grafici (SQL Server Management Studio).

Autorizzazioni necessarie per visualizzare piani di esecuzioni utilizzando le classi di evento di SQL Server Profiler

Per visualizzare i piani di esecuzione utilizzando le classi di evento SQL Server Profiler, gli utenti devono essere membri del ruolo predefinito del server sysadmin o disporre dell'autorizzazione ALTER TRACE. L'autorizzazione SHOWPLAN non è né necessaria né verificata.

Per ulteriori informazioni, vedere Visualizzazione dei piani di esecuzione utilizzando le classi di eventi di SQL Server Profiler.

Autorizzazioni necessarie per visualizzare i piani di esecuzione utilizzando la funzione a gestione dinamica sys.dm_exec_query_plan

Per visualizzare i piani di esecuzione utilizzando la funzione a gestione dinamica sys.dm_exec_query_plan, gli utenti devono disporre solo dell'autorizzazione VIEW SERVER STATE.

Per ulteriori informazioni, vedere sys.dm_exec_query_plan (Transact-SQL).

Vedere anche

Altre risorse