ホームページ >データベース >mysql チュートリアル >T-SQL で動的 SQL クエリを安全にパラメータ化する方法

T-SQL で動的 SQL クエリを安全にパラメータ化する方法

Susan Sarandon
Susan Sarandonオリジナル
2025-01-02 22:41:41140ブラウズ

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

T-SQL での動的 SQL クエリのパラメータ化

動的 SQL クエリでは、SQL インジェクション攻撃を防止し、型の安全性を確保するためにパラメータが重要です。 T-SQL 動的 SQL でパラメーターを操作する場合、それらを sp_executesql ストアド プロシージャに正しく渡すことが重要です。

問題:

次の動的クエリを想定します。 WHERE 句の UNIQUEIDENTIFIER パラメータ:

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

このクエリがパラメータを渡さずに実行すると、結果は返されません。

解決策:

この問題を解決するには、パラメータを sp_executesql に渡す必要があります。 WHERE 句を次のように変更します:

WHERE 
    CreatedBy = @p

そして @p パラメータ名を使用してパラメータを渡します:

EXECUTE sp_executesql @sql, N'@p UNIQUEIDENTIFIER', @p = @p_CreatedBY

これにより、WHERE 句の条件で呼び出し元からのパラメータ化された値が使用されるようになります。 、SQL インジェクションを防止し、型の安全性を確保します。

以上がT-SQL で動的 SQL クエリを安全にパラメータ化する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。