|
分類:[.NET 全般]
VisualStudio2010(C#)
SQLServer 2008 R2
SQLインジェクション対策について
動的にSQL文を組み立てる場合はSQLインジェクション対策を行う必要があると思いますが、
以下のようなストアドプロシージャの場合でも動的にSQL文を組み立てていることになるのでしょうか?
CREATE PROCEDURE TEST
(
@i_id CHAR(1)
)
AS
SELECT id,name from sample WHERE id = @i_id
このような場合でも、パラメータまで含めて文字列とし、
「sp_executesql」で実行する必要があるのでしょうか?
CREATE PROCEDURE TEST
(
@i_id CHAR(1)
)
AS
DECLARE @param NVARCHAR(MAX)
DECLARE @sql NVARCHAR(MAX)
BEGIN
SET @param = N'@i_id CHAR(1)'
SET @sql = 'SELECT id,name from sample WHERE id = @i_id'
EXEC sp_executesql @sql,@param,@i_id
END
ちなみにC#からは以下のような感じで実行しています。
using (SqlCommand command = con.CreateCommand())
{
command.CommandText = "TEST";
command.CommandType = CommandType.STOREDProcedure;
SqlParameter parameter = command.CreateParameter();
parameter.ParameterName = "@i_id";
parameter.Value = "a";
command.Parameters.Add(parameter);
command.ExecuteNonQuery();
}
(迷惑投稿者と判定されてしまうようなので、STOREDは全角にしています。)
WEB上でいろいろと検索しているのですが、
上記のようなシンプルなストアドの場合の情報がなかなか見つかりません。
よろしくお願いいたします。
|