ここで行う最善の方法は、データベースにストアド プロシージャを設定することです。このようにして、クライアント側でパスワードを公開することもありません。
サーバーでストアド プロシージャを作成するには、次のようにします。
CREATE PROCEDURE AuthenticateUser
(@username VarChar(25),
@password VarChar(25)) AS
SELECT
COUNT(*)
FROM COMPANY
WHERE Login = @username
AND Password = @password
RETURN @@Rowcount
このストアド プロシージャにアクセスするコードは次のようになります。
//Open a connection to the database using your connection string
using (SqlConnection con = new SqlConnection("My Configuration string"))
{
//Open the connection
con.Open();
//Create a new command for the stored proc, using the existing connection just opened
using(SqlCommand cmd = new SqlCommand("AuthenticateUser", con))
{
cmd.CommandType = CommandType.StoredProcedure;
//Add the username and password to the command, as paramaters (Prevents a lot of security issues, such as SQL Injection)
cmd.Parameters.Add("@username", SqlDbType.VarChar, 25).Value = UserIdTextBox.Text;
cmd.Parameters.Add("@password", SqlDbType.VarChar, 25).Value = "Password";
//A paramater for the return value, which will be a bool (Only 0 or 1 should be returned from the database/stored proc)
SqlParameter ret = new SqlParameter("ret", SqlDbType.Int);
ret.Direction = ParameterDirection.ReturnValue;
cmd.Parameters.Add(ret);
//Execute the query
cmd.ExecuteNonQuery();
if (Convert.ToBoolean(ret.Value) == true)
{
//Login Successful
}
else
{
//Login Failed
}
}
}
SQLParamaters は、ユーザーが入力したものを盲目的に受け入れるのではなく、入力をサニタイズするため (データベース全体を削除する可能性があります)、ユーザーがデータベースとやり取りする量を減らすのに役立ちます。
しかし、覚えておいてください。また、パスワードをハッシュしてソルトする必要があります。これを見たい場合は、すでにスタックオーバーフローについての質問があります。そして、これをしないのは非常に悪い習慣です。