現在、データを取得して保存するためにMySQLデータベースに接続するソフトウェアに取り組んでいます。ソフトウェア自体は正常に動作していますが、いくつかの新しいセキュリティ機能を実装したいと思います。
これらのセキュリティ機能の1つは、データベースユーザーのパスワードをプレーンテキストではなくハッシュとして保存することです。ちなみに、私はユーザーを確認するためにテーブルを使用していません。データベース自体に接続するためのデータベースユーザーについて話しています。
私は現在、パスワードをプレーンテキストで送信するMySQL接続文字列を使用しています。
public abstract Database()
{
ReadConfig();
connectionstring = "SERVER=" + server + ";" +
"DATABASE=" + database + ";" +
"UID=" + username + ";" +
"PASSWORD=" + password + ";";
try
{
connection = new MySqlConnection(connectionstring);
}
catch (MySqlException ex)
{
LogService.Log("ERROR - " + ex.ToString());
}
}
また、このデータをユーザーのコンピューターに保存して、ユーザーがサーバーアドレス、データベース、ユーザー名、およびパスワードを変更できるようにします。私が言ったように、これはプレーンテキストで保存されます。プレーンテキストとして保存されているサーバーアドレス、データベース名、およびユーザー名は私には問題ありませんが、パスワードをプレーンテキストで保存したくありません。
SHA1ハッシュ(または他のハッシュメソッド)を生成することは問題ではありません。これらのハッシュを生成するメソッドがすでにあるからです。
つまり、パスワードをハッシュとして保存し、そのハッシュを接続文字列で使用したいと思います。どうすればこれを実装できますか?
編集:これは「隠すことによるセキュリティ」ソリューションであり、ソフトウェアのセキュリティを拡張するための最良の方法ではないことを認識しています。チャレンジレスポンス方式の使い方を検討していますが、とりあえず上記を実装したいと思います。