Autorisation SHOWPLAN et traitements Transact-SQL
Un lot Transact-SQL se compose d'une ou de plusieurs instructions. Cette rubrique décrit comment SQL Server vérifie l'autorisation SHOWPLAN pour diverses options de l'instruction SET lorsqu'elles sont utilisées avec des lots Transact-SQL.
Remarque relative à la sécurité |
---|
Les utilisateurs qui disposent des autorisations SHOWPLAN, ALTER TRACE ou VIEW SERVER STATE peuvent afficher les requêtes capturées dans une sortie Showplan. Ces requêtes peuvent contenir des informations critiques telles que les mots de passe. C'est pourquoi, il est recommandé de n'accorder ces autorisations qu'aux utilisateurs qui sont autorisés à afficher les informations critiques, tels que les membres du rôle de base de données fixe db_owner ou les membres du rôle serveur fixe sysadmin. Il est également recommandé d'enregistrer les fichiers Showplan ou de trace qui contiennent des événements Showplan uniquement sur un emplacement qui utilise le système de fichiers NTFS et que vous limitiez l'accès aux utilisateurs qui sont autorisés à afficher les informations critiques. |
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 tables 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 ne fasse référence à des objets dans la base de données contextuelle.
Si un lot 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 AdventureWorks2008R2 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 AdventureWorks2008R2.Person.Address
USE master
SELECT * FROM AdventureWorks2008R2.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érifiée sur la base de données AdventureWorks2008R2. 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 AdventureWorks2008R2.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 que l'autorisation CONNECT est vérifiée pour l'instruction USE, l'utilisateur doit exister au préalable 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, l'autorisation SHOWPLAN est vérifiée sur la base de données AdventureWorks2008R2 pour l'instruction SELECT :
SET STATISTICS XML ON
GO
USE tempdb
EXEC ('USE master; SELECT * FROM AdventureWorks2008R2.Person.Address');
Notes
L'autorisation SHOWPLAN n'est pas vérifiée pour les requêtes qui font référence à des versions antérieures de SQL Server. Cependant, l'autorisation SHOWPLAN est vérifiée pour les parties de ces requêtes qui s'exécutent sur SQL Server 2005 ou versions ultérieures.
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 traitement exécutée et pour laquelle l'autorisation est acceptée.