Est-il possible d'écrire une requête de suppression à l'intérieur Où clause.Supprimer Requête dans la clause Where
Exemple:
Select ID,Name From MyTable Where ID IN(Delete From MyTable)
Il peut être fou, mais laissez-moi vous expliquer ma situation. Dans notre outil de reporting, nous prenons en charge la saisie de requêtes SQL. Nous allons utiliser notre propre Sélectionnez et DeClause requête et de combiner l'entrée de requête de l'utilisateur.
Exemple:
Select ID,Name From MyTable Where ("Query typed by user")
Ici, l'utilisateur peut saisir tout type d'où filtre de requête ..
S'il tape comme ID = 100 notre requête finale devient comme celui-ci
Select ID,Name From MyTable Where (ID=100)
Un de nos clients nous a demandé ce qui se passerait si quelqu'un tapait la requête de suppression comme filtre de requête. il pense que c'est peut-être le trou de sécurité ... nous avons donc essayé ce genre de possibilité dans notre environnement de développement. Mais le sql renvoie l'erreur pour la requête suivante.
Select ID,Name From MyTable Where ID IN(Delete From MyTable)
Donc finalement, ma question est, est-il une autre possibilité d'écrire Supprimer la requête dans Si possible, la clause Where ou clause Select .. comment puis-je restreindre?
OUI! S'ils entrent leur requête comme quelque chose comme "; GO; DELETE FROM MyTable". Il existe de nombreuses variantes à ce sujet, vous devez donc vraiment chercher des moyens d'arrêter l'injection SQL. Le moyen le plus simple d'éviter cela est de paramétrer votre requête et de passer le texte utilisateur en paramètre. –
Oui, c'est très dangereux. Ils pourraient mettre quelque chose comme 1 = 1; supprimer de la table. Lookup sql injection. – SQLChao
Ceci est une injection SQL, et vous ne devriez pas laisser un utilisateur taper n'importe quel type de requête qu'il veut. Que faire si la requête qu'ils ajoutent est 'ID = 100); DELETE FROM MyTable; '? – Lamak