ce qui est l'équivalent de EXPLIQUER forme SQLite dans SQL Server?
-
28-10-2019 - |
Question
J'utilisé une base de données SQLite et exécuter une instruction avant d'exécuter la EXPLIQUEZ requête réelle afin de vérifier s'il y avait une tentative d'écriture sur la base de données.
Maintenant, nous avons migré vers SQL Server et je dois savoir si une tente de requête pour écrire sur la base de données ou est juste une simple instruction SELECT. J'essaie essentiellement d'éviter toute déclaration malveillante.
La solution
Vous pouvez voir le plan de requête estimé d'une requête en SSMS en cliquant sur le bouton plan de requête estimé.
Voir MSDN .
Cependant, si l'utilisateur ne doit pas être en train d'écrire à la base de données, est ne devrait pas avoir les autorisations nécessaires pour le faire. Assurez-vous qu'il appartient à un rôle qui a des autorisations limitées.
Autres conseils
Si vous décidez d'emprunter cette voie, vous pouvez faire ce qui suit:
set showplan_xml on
go
set noexec on
go
select * from sysobjects
go
set noexec off
go
set showplan_xml off
go
Ceci renvoie 3 jeux de résultats contenant une seule colonne de XML. L'ensemble 2e résultat est le plan de requête pour la requête réelle (dans ce cas, select * from sysobjects
)
Mais comme il est indiqué dans mon commentaire, vous feriez mieux de prévenir l'utilisateur ayant des autorisations pour effectuer des modifications.
Il est également possible aux déclarations d'artisanat qui sont « seulement », mais qui sont choisit aussi assez malveillant. Je pourrais facilement écrire un sélectionner qui verrouille exclusivement toutes les tables dans la base de données et prend une heure à courir.