Autorisation SHOWPLAN et lots Transact-SQL

Un lot Transact-SQL se compose d'une ou de plusieurs instructions. Cette rubrique décrit comment SQL Server 2005 vérifie l'autorisation SHOWPLAN pour diverses options de l'instruction SET lorsqu'elles sont utilisées avec des lots Transact-SQL.

Lots qui contiennent des instructions USE ou SET

Aucune vérification de l'autorisation SHOWPLAN n'est effectuée sur les instructions USE ou SET (SHOWPLAN_TEXT, SHOWPLAN_ALL, SHOWPLAN_XML, STATISTICS PROFILE ou STATISTICS XML). Pour les options SHOWPLAN_TEXT, SHOWPLAN_ALL et SHOWPLAN_XML qui génèrent la sortie du plan d'exécution estimé, aucune instruction Transact-SQL du lot n'est exécutée, à l'exception des instructions USE database_name qui sont exécutées pour ces options SET Showplan.

Exemples de vérifications de l'autorisation SHOWPLAN

La base de données contextuelle se définit dans des lots au moyen de l'instruction USE database_name. L'autorisation SHOWPLAN est vérifiée pour les bases de données qui contiennent des objets, tels que des plans ou des vues, référencés dans des instructions Transact-SQL. Cependant, l'autorisation SHOWPLAN n'est pas vérifiée pour les bases de données contextuelles à moins que l'instruction Transact-SQL fasse référence à des objets dans la base de données contextuelle.

Si une base de données contient une instruction USE database_name, la base de données contextuelle change. Dans ce cas, l'autorisation SHOWPLAN n'est pas vérifie pour la base de données contextuelle active lorsqu'une instruction particulière se présente dans un lot.

Par exemple, dans le lot suivant, l'autorisation SHOWPLAN de la base de données AdventureWorks est vérifiée pour les deux instructions SELECT. L'autorisation SHOWPLAN n'est pas vérifiée pour les bases de données master ou tempdb référencées dans les instructions USE :

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

Vérifications de l'autorisation SHOWPLAN pour les instructions SQL dynamiques

  • Pour les instructions SQL dynamiques de la forme EXEC (command_string) ou EXEC (character_string), aucune vérification de l'autorisation SHOWPLAN n'est effectuée, y compris pour une chaîne de caractères insérée.
  • Pour les instructions SQL dynamiques qui exécutent une procédure stockée de la forme EXEC dbo.my_stored_procedure, aucune autorisation SHOWPLAN n'est vérifiée sur l'instruction EXEC elle-même. Cependant, du fait qu'un Showplan est créé pour le corps de l'ensemble de la procédure stockée, l'autorisation SHOWPLAN est vérifiée pour les bases de données qui contiennent des objets référencés par des instructions de la procédure stockée.

L'exemple suivant illustre comment les autorisations SHOWPLAN sont vérifiées pour les instructions SQL dynamiques. Pour l'instruction SELECT, l'autorisation SHOWPLAN est vérifée sur la base de données AdventureWorks. Aucune vérification de l'autorisation SHOWPLAN n'est effectuée sur l'instruction EXEC elle-même, sur la base de données tempdb ou master :

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

Dans l'exemple suivant qui utilise l'instruction SET STATISTICS XML, si le lot est envoyé à la base de données master, aucune autorisation SHOWPLAN n'est vérifiée pour l'instruction SET. Aucune autorisation SHOWPLAN n'est vérifiée pour l'instruction USE tempdb. Cependant, du fait l'autorisation CONNECT est vérifiée pour l'instruction USE, l'utilisateur doit exister auparavant dans la base de données tempdb et avoir l'autorisation CONNECT sur la base de données tempdb. Aucune autorisation SHOWPLAN n'est vérifiée pour l'instruction EXEC car c'est elle-même qui génère la sortie de la représentation. Aucune autorisation SHOWPLAN n'est vérifiée pour l'instruction USE master. Cependant, pour l'instruction SELECT, l'autorisation SHOWPLAN est vérifée sur la base de données AdventureWorks :

SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks.Person.Address');
ms178086.note(fr-fr,SQL.90).gifRemarque :
L'autorisation SHOWPLAN n'est pas vérifiée pour les requêtes qui font référence à des versions SQL Server antérieures. Cependant, l'autorisation SHOWPLAN est vérifiée pour les parties de ces requêtes qui s'exécutent sur SQL Server 2005.

Lots qui contiennent des erreurs

Si une des options Showplan de l'instruction SET est utilisée avec un lot Transact-SQL qui génère une erreur d'exécution d'une instruction ou de vérification d'une autorisation, la base de données contextuelle est déterminée en fonction du mode d'option SET utilisé :

  • SHOWPLAN_TEXT, SHOWPLAN_ALL et SHOWPLAN_XML
    La base de données contextuelle active avant le démarrage de l'exécution du lot reste active. La sortie de la représentation est créée pour l'ensemble du lot si une erreur d'exécution d'une instruction ou des erreurs de vérification des autorisations se produisent. Toutes les vérifications des autorisations et les instructions doivent s'exécuter, faute de quoi aucune sortie de la représentation n'est créée.
  • STATISTICS PROFILE et STATISTICS XML
    La base de données contextuelle active lorsque la dernière instruction est exécutée reste active. La sortie de la représentation est générée pour chaque instruction du lot et chaque vérification des autorisations exécutée. La sortie de la représentation est produite pour chaque instruction du lot exécutée et pour laquelle l'autorisation est acceptée.

Voir aussi

Concepts

Sécurité Showplan

Aide et Informations

Assistance sur SQL Server 2005