プログラムのログイン情報用のMySQLテーブルがあります。パスワードのデータ型はvarcharです。パスワードにログインしようとすると、小文字でも大文字でも構いません。正しい文字を入力すると、ログインします。これに対する解決策は何ですか?あなたの助けに感謝します
1 に答える
1
これは、デフォルトで mysql が大文字と小文字を区別しないために発生します。
mysql> create table foo (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, bar VARCHAR(20));
Query OK, 0 rows affected (0.12 sec)
mysql> insert into foo values ('','Hello'),('','hello');
Query OK, 2 rows affected, 2 warnings (0.03 sec)
Records: 2 Duplicates: 0 Warnings: 0
mysql> select * from foo where bar = 'hello';
+----+-------+
| id | bar |
+----+-------+
| 1 | Hello |
| 2 | hello |
+----+-------+
2 rows in set (0.00 sec)
最も簡単なオプションは、パスワードをプレーン テキストで保存しないことです。それらを暗号化またはハッシュし、代わりにハッシュ/暗号化された値を保存します。
パスワードのハッシュを保存する簡単な方法は、組み込みmd5
関数を使用することです。
mysql> SELECT MD5('secret');
+----------------------------------+
| MD5('secret') |
+----------------------------------+
| 5ebe2294ecd0e0f08eab7690d2a6ee69 |
+----------------------------------+
1 row in set (0.40 sec)
次に、クエリは次のようになります。
SELECT * FROM `sometable` WHERE `the_password` = MD5('secret');
これは一方向のハッシュであることに注意してください。つまりsecret
、ハッシュされたバージョンから単語を実際に取得することはできません。したがって、これを使用して、たとえばユーザー登録のウェルカム メールにパスワードを表示することはできません。
MySQL は、いくつかの暗号化およびハッシュ関数をサポートしており、確認する必要があります。
于 2013-01-06T09:13:07.960 に答える