2016-03-22 2 views
0

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

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