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é 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 :
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 |
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 |
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. |