Autorizzazione SHOWPLAN e batch di comandi Transact-SQL

Un batch di comandi Transact-SQL è costituito da una o più istruzioni. In questo argomento viene illustrato come viene eseguito il controllo dell'autorizzazione SHOWPLAN in SQL Server per diverse opzioni dell'istruzione SET Showplan utilizzate con batch di comandi Transact-SQL.

Nota sulla protezioneNota sulla protezione

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.

Batch contenenti istruzioni USE o SET

Nessun controllo dell'autorizzazione SHOWPLAN viene eseguito su istruzioni USE o SET per le opzioni dell'istruzione SET Showplan (SHOWPLAN_TEXT, SHOWPLAN_ALL, SHOWPLAN_XML, STATISTICS PROFILE o STATISTICS XML). Nel caso di SHOWPLAN_TEXT, SHOWPLAN_ALL e SHOWPLAN_XML, che generano l'output del piano di esecuzione stimato, non viene eseguita alcuna istruzione Transact-SQL inclusa nel batch, ad eccezione delle istruzioni USE database_name, eseguite per queste opzioni dell'istruzione SET Showplan.

Esempi di controllo dell'autorizzazione SHOWPLAN

Il database di contesto viene impostato in batch utilizzando un'istruzione USE database_name. Il controllo dell'autorizzazione SHOWPLAN viene eseguito nei database che contengono oggetti, ad esempio tabelle o viste, a cui fanno riferimento le istruzioni Transact-SQL. Tuttavia, l'autorizzazione SHOWPLAN viene controllata nei database di contesto solo se l'istruzione Transact-SQL fa riferimento a oggetti inclusi in tale database.

Se un batch di comandi include un'istruzione USE database_name, il database di contesto viene modificato. In tale caso, non viene eseguito il controllo dell'autorizzazione SHOWPLAN per il database di contesto attivo quando in un batch viene eseguita una determinata istruzione.

Ad esempio, nel batch seguente viene eseguito il controllo dell'autorizzazione SHOWPLAN nel database AdventureWorks per entrambe le istruzioni SELECT. L'autorizzazione SHOWPLAN non viene controllata nei database master o tempdb, a cui fanno riferimento le istruzioni USE:

SET SHOWPLAN_XML ON
GO
USE tempdb
SELECT * FROM AdventureWorks.Person.Address
USE master
SELECT * FROM AdventureWorks.Person.Address
GO

Controlli dell'autorizzazione SHOWPLAN per istruzioni SQL dinamiche

  • Nel caso delle istruzioni SQL dinamiche con formato EXEC (command_string) o EXEC (character_string) non viene eseguito alcun controllo dell'autorizzazione SHOWPLAN per l'istruzione, inclusa la stringa incorporata.

  • Nel caso delle istruzioni SQL dinamiche che eseguono una stored procedure con formato EXEC dbo.my_stored_procedure, nessuna autorizzazione SHOWPLAN viene controllata per l'istruzione EXEC stessa. Tuttavia, poiché per l'intero corpo della stored procedure viene prodotta un'autorizzazione SHOWPLAN, tale autorizzazione viene controllata nei database contenenti oggetti a cui fanno riferimento le istruzioni incluse nella stored procedure.

Nell'esempio seguente viene illustrato come viene eseguito il controllo delle autorizzazioni SHOWPLAN per le istruzioni SQL dinamiche. Nel caso dell'istruzione SELECT, l'autorizzazione SHOWPLAN viene controllata nel database AdventureWorks. Nessun controllo dell'autorizzazione SHOWPLAN viene eseguito nell'istruzione EXEC stessa, nel database tempdb o nel database master:

SET SHOWPLAN_XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');

Nell'esempio seguente, in cui viene utilizzata l'istruzione SET STATISTICS XML, se il batch di comandi viene inviato al database master, nessuna autorizzazione SHOWPLAN viene controllata nell'istruzione SET. Nessuna autorizzazione SHOWPLAN viene controllata nell'istruzione USE tempdb. Tuttavia, poiché l'autorizzazione CONNECT viene controllata per l'istruzione USE, è necessario che l'utente esista già nel database tempdb e che disponga dell'autorizzazione CONNECT per il database tempdb. Nessuna autorizzazione SHOWPLAN viene controllata per l'istruzione EXEC, poiché tale istruzione non genera alcun output di tipo Showplan. Nessuna autorizzazione SHOWPLAN viene controllata nell'istruzione USE master. Tuttavia, l'autorizzazione SHOWPLAN viene controllata nel database AdventureWorks per la costante SELECT:

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');
Nota sulla protezioneNota sulla protezione

Il controllo dell'autorizzazione SHOWPLAN non viene eseguito per query che fanno riferimento a versioni precedenti di SQL Server. Tuttavia, l'autorizzazione SHOWPLAN viene controllata nel caso di parti di tali query eseguite in SQL Server 2005 e versioni successive.

Batch contenenti errori

Se una delle opzioni dell'istruzione SET Showplan viene utilizzata con un batch di comandi Transact-SQL che genera un errore di esecuzione dell'istruzione o un errore di controllo dell'autorizzazione, il database di contesto viene determinato come riportato di seguito, a seconda della modalità di opzione SET utilizzata:

  • SHOWPLAN_TEXT, SHOWPLAN_ALL e SHOWPLAN_XML

    Il database di contesto attivo prima dell'avvio dell'esecuzione del batch di comandi rimane attivo. Nessun output di tipo Showplan viene generato per l'intero batch in caso di errori di esecuzione dell'istruzione o di controllo dell'autorizzazione. Tutti i controlli delle autorizzazioni e le istruzioni devono essere eseguiti correttamente. In caso contrario, non verrà generato alcun output di tipo Showplan.

  • STATISTICS PROFILE e STATISTICS XML

    Il database di contesto attivo al momento dell'esecuzione corretta dell'ultima istruzione rimane attivo. Output di tipo Showplan viene generato per ogni istruzione inclusa nel batch contenente l'istruzione eseguita correttamente e in cui sono stati eseguiti correttamente i controlli dell'autorizzazione. Viene generato un output di tipo Showplan per ogni istruzione del batch la cui esecuzione è corretta e per cui è possibile eseguire correttamente i controlli dell'autorizzazione.

Cronologia modifiche

Aggiornamento del contenuto

È stata aggiunta una nota relativa alla protezione di informazioni riservate che possono essere visualizzate in file Showplan oppure in file di traccia.