我有一个用于我程序登录信息的MySQL表。 password数据类型是varchar。当我尝试登录我的密码时,它并不关心我的角色是小写还是大写。如果我输入正确的字母,它会让我登录。这是什么解决方案?非常感谢你的帮助
答案 0 :(得分:1)
这是因为默认情况下mysql是case insensitive:
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支持您应该查看的一些encryption and hashing functions。