パラメータをSQLに渡すことで、動的SQL文字列を作成する必要がなくなります。
動的SQLステートメントの作成は、ユーザーが独自のSQLコードをアプリケーションに挿入し、データに対して望ましくないコマンドを実行する可能性があるため、大きなセキュリティリスクになります。
SQLインジェクション攻撃の可能性のあるいくつかの良いサンプルがあります:
例によるSQLインジェクション攻撃
SQLステートメントにパラメーターを渡す方法は2つあります。 1つは、前述のようにストアドプロシージャを使用することです。もう1つは、パラメーター化されたクエリを使用することです(これは実際に私が好むものです)。
パラメータ化されたクエリは、実際には.NETでは非常に簡単です:
using(SqlConnection conn = new SqlConnection(connString))
{
SqlCommand command =
new SqlCommand("SELECT * FROM Users WHERE Username = @Username", conn);
command.Parameters.Add(new SqlParameter("@Username", "Justin Niessner"));
SqlDataAdapter adapter = new SqlDataAdapter(command);
DataTable dt = new DataTable();
adapter.Fill(dt);
}
この例では、パラメーターは@Username
でした。 Parameters
を使用しました SqlCommand
のコレクション 値を渡すオブジェクト。