Partager via


Sécurité Showplan

Les informations du plan d'exécution Showplan peuvent être produites de diverses manières. Vous pouvez utiliser des options d'instruction SET Transact-SQL, des classes d'événements SQL Server Profiler ou vous pouvez interroger la fonction de gestion dynamique sys.dm_exec_query_plan. Chaque méthode nécessite un ensemble différent d'autorisations qui sont décrites dans les sections suivantes. Pour plus d'informations sur le mode de contrôle de l'autorisation SHOWPLAN pour les lots Transact-SQL, consultez Autorisation SHOWPLAN et traitements Transact-SQL.

[!REMARQUE]

Lorsqu'un niveau de compatibilité de base de données SQL Server est fixé à 80 à l'aide de la procédure stockée sp_dbcmptlevel, l'autorisation SHOWPLAN active s'applique toujours. L'attribution de la valeur 80 au niveau de compatibilité ne produit pas le comportement d'autorisations Showplan de Microsoft SQL Server 2000.

À propos de l'autorisation SHOWPLAN

Pour produire une sortie de plan d'exécution à l'aide de la plupart des options SET Transact-SQL de Showplan, les utilisateurs doivent posséder :

  • L'autorisation SHOWPLAN sur les bases de données qui contiennent des objets auxquels il est fait référence dans l'instruction Transact-SQL, par exemple des vues, des procédures stockées ou des fonctions définies par l'utilisateur.

  • L'autorisation appropriée permettant d'exécuter l'instruction Transact-SQL proprement dite.

    Remarque relative à la sécurité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.

    Examinez, par exemple, la requête suivante :

    SELECT COUNT(*)

    FROM table_1

    WHERE column_1 < 10

    Si un utilisateur mal intentionné produit une sortie Showplan pour un ensemble de requêtes comme celle de l'exemple, puis remplace la valeur « 10 » dans le prédicat par différentes constantes à chaque fois, il peut déduire une distribution de données approximative des valeurs de colonne pour column_1 de la table table_1 par la lecture du nombre de lignes estimées.

L'autorisation SHOWPLAN est une autorisation de niveau base de données qui :

  • Peut être accordée, refusée ou révoquée uniquement par les utilisateurs suivants :

    • Membres du rôle de serveur fixe sysadmin. Par défaut, tous les membres de ce rôle de serveur fixe disposent de l'autorisation SHOWPLAN sur toutes les bases de données du serveur.

    • Membres du rôle de serveur fixe dbcreator pour les bases de données qu'ils créent et donc possèdent. Par défaut, tous les membres de ce rôle de serveur fixe disposent de l'autorisation SHOWPLAN sur toutes les bases de données qu'ils créent et donc possèdent.

    • Membres du rôle de base de données fixe db_owners pour les bases de données qu'ils possèdent. Par défaut, tous les membres de ce rôle de base de données fixe disposent de l'autorisation SHOWPLAN sur toutes les bases de données qu'ils possèdent.

  • Prend en charge le chaînage des propriétés. Lorsque la chaîne de propriétés est rompue, l'autorisation est revérifiée sur le nœud où la rupture s'est produite. Cependant, comme l'autorisation SHOWPLAN est une autorisation de niveau base de données, ce contrôle intervient uniquement lorsque des requêtes font référence à des objets dans plusieurs bases de données. Pour plus d'informations sur le chaînage des propriétés, consultez Chaînes de propriétés.

Pour plus d'informations sur la syntaxe utilisée pour accorder, refuser ou révoquer l'autorisation SHOWPLAN, consultez Syntaxe pour l'octroi, le refus et la révocation de l'autorisation SHOWPLAN.

Exemple

Si User1 a les autorisations CREATE TABLE, INSERT et SELECT et s'il crée la table T (il est le propriétaire de la table) dans la base de données D, s'il insère des lignes dans la table, puis écrit une requête SELECT sur la table, la requête s'exécute avec succès. Cependant, User1 ne peut pas générer un Showplan tant qu'il n'a pas reçu l'autorisation SHOWPLAN sur la base de données D.

Mise en garde

Dans l'exemple précédent, supposons que la base de données D contienne la vue V pour laquelle User1 a l'autorisation SELECT. Une fois que User1 a reçu l'autorisation SHOWPLAN pour D, il peut toujours générer un plan d'exécution Showplan sur une requête adressée à V, même s'il n'est pas propriétaire de la vue V. Ce plan d'exécution lui permet de voir la définition de la vue pour V, notamment les tables et les vues sur lesquelles la vue V se base. Cependant, si V contient un objet, par exemple une table, possédée par User1 et qui existe dans une autre base de données, D2, et si User1 n'est pas le propriétaire de D2, l'autorisation SHOWPLAN sur D2 est contrôlée et obligatoire.

Autorisations requises pour utiliser les options Showplan SET

Les autorisations requises pour utiliser les diverses options de l'instruction Showplan SET sont répertoriées dans le tableau suivant :

Options Showplan SET

Autorisations requises

SET SHOWPLAN_XML ON

SET SHOWPLAN_ALL ON

SET SHOWPLAN_TEXT ON

Pour les instructions SELECT, INSERT, UPDATE, DELETE, EXEC stored_prodedure et EXEC user_defined_function, les autorisations suivantes sont requises pour produire un plan d'exécution Showplan :

  • Autorisations appropriées pour exécuter les instructions Transact-SQL.

  • Autorisations SHOWPLAN sur toutes les bases de données contenant des objets référencés par les instructions Transact-SQL, tels que des tables, des vues, etc.

Pour toutes les autres instructions, telles que DDL, USE database_name, SET, DECLARE, dynamic Transact-SQL, etc., seules les autorisations appropriées pour exécuter l'instruction Transact-SQL sont nécessaires. Pour plus d'informations, consultez Autorisation SHOWPLAN et traitements Transact-SQL.

SET STATISTICS XML ON

SET STATISTICS PROFILE ON

  • Autorisations appropriées pour exécuter les instructions Transact-SQL.

  • Autorisation SHOWPLAN sur toutes les bases de données contenant des objets référencés par les instructions Transact-SQL.

Pour les instructions Transact-SQL qui ne produisent pas de jeux de résultats STATISTICS PROFILE ou STATISTICS XML, seules les autorisations appropriées pour exécuter les instructions Transact-SQL sont obligatoires. Pour les instructions Transact-SQL qui ne produisent pas de jeux de résultats STATISTICS PROFILE ou STATISTICS XML, les contrôles pour l'autorisation d'exécution de l'instruction Transact-SQL et l'autorisation SHOWPLAN doivent réussir, sinon l'exécution de l'instruction Transact-SQL est abandonnée et aucune information Showplan n'est générée. Pour plus d'informations sur les instructions Transact-SQL qui produisent des informations Showplan, consultez Instructions Transact-SQL qui génèrent des plans d'exécution.

SET STATISTICS TIME

SET STATISTICS IO

  • Autorisations appropriées pour exécuter les instructions Transact-SQL.

Aucune de ces options d'instruction SET ne contrôlent ni ne nécessitent l'autorisation SHOWPLAN.

Quand l'autorisation SHOWPLAN est-elle contrôlée ?

L'autorisation SHOWPLAN est contrôlée lorsqu'une instruction ou un traitement Transact-SQL s'exécute et que des informations Showplan sont générées. Le contrôle n'est pas effectué lorsqu'une option Showplan SET a la valeur ON.

[!REMARQUE]

La base de données de contexte pour un traitement Transact-SQL est définie à l'aide d'une instruction USE <database_name>. L'autorisation SHOWPLAN n'est pas contrôlée sur les instructions USE <database_name>, ni sur la base de données de contexte.

Pour plus d'informations sur les options d'instruction Showplan SET, consultez les rubriques suivantes :

Autorisations requises pour afficher des plans d'exécution graphique à l'aide de SQL Server Management Studio

Les autorisations requises pour afficher les plans d'exécution graphique dans SQL Server Management Studio sont répertoriées dans le tableau suivant :

Option de plan d'exécution de Management Studio

Autorisations requises

Afficher le plan d'exécution estimé

Nécessite les mêmes autorisations que celles requises pour utiliser l'option d'instruction SET SHOWPLAN_XML.

Inclure le plan d'exécution réel

Nécessite les mêmes autorisations que celles requises pour utiliser l'option d'instruction SET STATISTICS XML.

Pour plus d'informations, consultez Affichage de plans d'exécution graphique (SQL Server Management Studio).

Autorisations requises pour afficher des plans d'exécution à l'aide de classes d'événements de SQL Server Profiler

Pour afficher des plans d'exécution à l'aide des classes d'événements SQL Server Profiler, les utilisateurs doivent être membres du rôle de serveur fixe sysadmin ou avoir obtenu l'autorisation ALTER TRACE. L'autorisation SHOWPLAN n'est ni contrôlée, ni nécessaire.

Pour plus d'informations, consultez Affichage des plans d'exécution en utilisant des classes d'événements dans le Générateur de profils SQL Server.

Autorisations requises pour afficher des plans d'exécution à l'aide de la fonction de gestion dynamique sys.dm_exec_query_plan

Pour afficher des plans d'exécution à l'aide de la fonction de gestion dynamique sys.dm_exec_query_plan, les utilisateurs doivent uniquement obtenir l'autorisation VIEW SERVER STATE.

Pour plus d'informations, consultez sys.dm_exec_query_plan (Transact-SQL).

Historique des modifications

Mise à jour du contenu

Mise à jour de la remarque de sécurité pour indiquer comment protéger les informations critiques qui peuvent s'afficher dans des fichiers Showplan ou de trace.

Voir aussi

Autres ressources