Je travaille dans PDW AU5. J'écris une procédure stockée qui nécessite un SQL dynamique (à cause des noms de bases de données variables). Donc, pour empêcher l'injection SQL, je fais un test simple de la valeur du paramètre d'entrée à la procédure stockée. Si le test échoue, je veux quitter la procédure stockée. Normalement sur SMP, je le ferais avec RETURN -1. Cependant, RETURN n'est pas autorisé dans les procédures stockées sur PDW. Comment puis-je contourner cela?Comment quitter une procédure stockée dans PDW
0
A
Répondre
0
Vous devez placer le code autour d'une instruction IF et dans la section où il est censé être RETOUR ed Assurez-vous simplement que la condition IF n'est pas remplie et que le bloc de code entier est contourné et à la fin de la procédure stockée.
par exemple.
CREATE PROCEDURE dbo.uspDynamicSQL
(@UserField varchar(255))
AS
IF CHARINDEX(@UserField) > 0 THEN
BEGIN
-- YOUR SQL CODE AS NORMAL
END;
Ce n'est pas joli mais cela fonctionne.
0
Vous pouvez essayer d'utiliser la fonction QUOTENAME pour échapper le caractère guillemet simple de la chaîne d'entrée afin d'empêcher l'injection du code SQL dynamique.
DECLARE @userfield VARCHAR(255) = 'abc'' ;SELECT 1; '
DECLARE @sql NVARCHAR(4000)
SET @sql = 'SELECT ' + QUOTENAME(@UserField, '''')
PRINT @sql
EXEC (@sql)
Voir un autre message sur la façon d'éviter l'injection SQL how to prevent SQL Injection