質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

1回答

15786閲覧

C# DBを接続をし、ログイン認証について

退会済みユーザー

退会済みユーザー

総合スコア0

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

0クリップ

投稿2017/08/18 13:51

編集2017/08/18 13:52

自社の課題で管理アプリケーションというものを行っているのですが、
C#でログイン認証をという機能やっているのですが、
DBを使用するのですがうまくログイン認証ができずになっています。
それにふまえ入力されたIDとPasswordの該当があるか確認の処理も行うところです。

ログイン認証をうまくいくにはどう書いていったらよろしいでしょうか?
ご教示の程、宜しくお願い致します。

//DB接続しログインの認証をさせる
try
{
//データベース接続を確立させる
string sConnectionString;
sConnectionString = "Server=localhost;Database=mysql;uid=root;pwd=root;";
MySqlConnection conn = new MySqlConnection(sConnectionString);
conn.Open();

//データベースとDatasetオブジェクトの間のリンクを表すDataAdapterを作成 MySqlDataAdapter sa = new MySqlDataAdapter("SELECT * FROM password_list WHERE HASH", conn); //DataAdapterの呼び出し DataSet ds = new DataSet(); sa.Fill(ds); DataTable dt; dt = ds.Tables["password_list"]; //DataTableのRowsコレクションに含まれるすべてのDataRowオブジェクトを読み込み foreach (DataRow drCurrent in dt.Rows) { Console.WriteLine( drCurrent["ID"].ToString(), drCurrent["PASSWORD"].ToString()); } Console.ReadLine(); conn.Close(); } catch (MySqlException ex) { Console.WriteLine(ex.Message); }

ログイン認証をして、次のフォームに移行する処理を試してみたい認識です。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Kunihiro_Narita

2017/08/20 07:19

提示しているソースコードではパスワードが保存されているテーブルを読み出しているようですが、肝心の認証部分が実装されていません。一般的には入力したパスワードにSALT等を加えた上で、ストレッチを行い、ハッシュ値を求め、IDとハッシュ値が一致するレコードが存在するかクエリを掛けるような実装になるかと思います。
guest

回答1

0

ベストアンサー

別の方がフォロー書いておられますが、たぶん知識レベルに合わない言葉が出ているかと思いますので私からも補足いたします。
提示されているサンプルコードでは肝心な「ログインの認証をさせる」処理が書かれていません。
「ハッシュ」「SALT」「ストレッチ」等は「ログイン認証」の本質とは外れますので、一旦気にしないでください。
「フォーム」と書かれていますが、「Windows Forms」と「Web Forms」のどちらでしょうか?
※まぁどちらでもおおよそ変わりないんですが。

一般的に、ユーザーが入力したIDとパスワードが認証用のテーブルに存在すれば認証OK、という形になります。
(そしてこの認証用のテーブルに格納する値が生のパスワードではまずいため、ハッシュやソルト等の概念が出てきます。)

でそれを踏まえてWebと仮定してコードを書くならこんな感じですかね。

C#

1 protected void btnConfirm_OnClick(object sender, EventArgs e) 2 { 3 var id = this.txtId.Text; 4 var pass = this.txtPassword.Text; 5 6 if (Authenticate(id, pass)) 7 Response.Redirect("認証OKなページ.aspx"); 8 } 9 10 private bool Authenticate(string id, string pass) 11 { 12 try 13 { 14 using (SqlConnection conn = new SqlConnection("Server=localhost;Database=mysql;uid=root;pwd=root;")) 15 { 16 conn.Open(); 17 18 using (SqlDataAdapter sa = new SqlDataAdapter("SELECT * FROM password_list WHERE HASH", conn)) 19 { 20 DataSet ds = new DataSet(); 21 sa.Fill(ds); 22 DataTable dt = ds.Tables["password_list"]; 23 24 foreach (DataRow drCurrent in dt.Rows) 25 { 26 if (id == drCurrent["ID"].ToString() 27 && pass == drCurrent["PASSWORD"].ToString()) 28 //入力されたID/PASSに該当するデータがDBに存在した=認証が通った 29 return true; 30 } 31 } 32 } 33 } 34 catch (SqlException ex) 35 { 36 //然るべきハンドリング 37 } 38 39 //認証が通らなかった 40 return false; 41 }

ものすごく簡単に書いた必要最低限のコードですので頑張って読み解いてください。
老婆心ながら一言。
ネットのQAサイトで聞かないで、OJTと言うなの投げっぱなし担当である上司・先輩に聞いたほうが早いと思いますよw

投稿2017/08/21 06:12

ShikaTech

総合スコア468

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/08/21 14:32

ありがとうございます。 糸口が見えればなんとか行けそうです。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問