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 2005 per diverse opzioni dell'istruzione SET Showplan utilizzate con batch di comandi Transact-SQL.

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

L'istruzione USE database_name consente di configurare in batch il database di contesto. 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 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. Nessun controllo dell'autorizzazione SHOWPLAN viene eseguito 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] 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.

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 output di tipo Showplan per ogni istruzione del batch la cui esecuzione è corretta e per cui è possibile eseguire correttamente i controlli dell'autorizzazione.

Vedere anche

Concetti

Aspetti di protezione relativi a Showplan

Guida in linea e informazioni

Assistenza su SQL Server 2005