Maison > base de données > tutoriel mysql > Comment paramétrer en toute sécurité des requêtes SQL dynamiques dans T-SQL ?

Comment paramétrer en toute sécurité des requêtes SQL dynamiques dans T-SQL ?

Susan Sarandon
Libérer: 2025-01-02 22:41:41
original
140 Les gens l'ont consulté

How to Safely Parameterize Dynamic SQL Queries in T-SQL?

Paramétrage des requêtes SQL dynamiques dans T-SQL

Dans les requêtes SQL dynamiques, les paramètres sont cruciaux pour prévenir les attaques par injection SQL et garantir la sécurité des types. Lorsque vous travaillez avec des paramètres dans le SQL dynamique T-SQL, il est important de les transmettre correctement à la procédure stockée sp_executesql.

Problème :

Considérez la requête dynamique suivante qui attend un paramètre UNIQUEIDENTIFIER pour la clause WHERE :

CREATE PROCEDURE [dbo].[sp_Test1] /* 'b0da56dc-fc73-4c0e-85f7-541e3e8f249d' */
(
@p_CreatedBy UNIQUEIDENTIFIER
)
AS
DECLARE @sql NVARCHAR(4000)
SET @sql ='

DECLARE @p_CreatedBY UNIQUEIDENTIFIER

SELECT 
  DateTime,
  Subject,
  CreatedBy
FROM
(
  SELECT 
    DateTime, Subject, CreatedBy, 
    ROW_NUMBER() OVER(ORDER BY DateTime ) AS Indexing
  FROM
    ComposeMail
  WHERE 
    CreatedBy = @p_CreatedBy /* <--- the problem is in this condition */
) AS NewDataTable
'

EXEC sp_executesql @sql
Copier après la connexion

Lorsque cette requête est exécutée sans passer le paramètre, non le résultat est renvoyé.

Solution :

Pour résoudre ce problème, les paramètres doivent être transmis à sp_executesql. Modifiez la clause WHERE comme suit :

WHERE 
    CreatedBy = @p
Copier après la connexion

Et transmettez le paramètre en utilisant le nom du paramètre @p :

EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY
Copier après la connexion

Cela garantit que la condition de la clause WHERE utilise la valeur paramétrée de l'appelant , empêchant l'injection SQL et garantissant la sécurité des types.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal